猫鼬嵌套查找不起作用[重复]
Posted
技术标签:
【中文标题】猫鼬嵌套查找不起作用[重复]【英文标题】:Mangoose Nested Find not working [duplicate] 【发布时间】:2018-04-22 00:01:42 【问题描述】:这是我的模型:
UserModel = mongoose.Document &
username: string,
password: string,
records: Record[]
;
Record:
name: string;
date: Date;
查询:
const date = new Date();
const lastDate = new Date(date.getTime() - (30 * 24 * 60 * 60 * 1000));
UserModel.find( "records" : "$elemMatch": "date" : "$gte": lastDate , (err, userRecords: any) =>
if (err)
return res.json(
"status": "error",
"detail": err
);
return res.json(
"records": userRecords
);
);
此查询返回所有记录,而不是最近 30 天的记录。我找不到哪里出错了。
编辑:即使在上面使用“lastDate.toISOString()”代替“lastDate”之后,我仍然可以得到所有结果。
编辑:测试了一些其他解决方案,例如使用“$filter”,但我仍然获得了所有记录。
【问题讨论】:
.find()
查询不会“过滤”返回的数组内容。该任务属于$filter
检查date
存储在Records
文档中的格式。在 Mongo 中,如果字段的过滤条件与格式不匹配,则返回整个集合
@Abhishek 以格式日期存储在文档中
如果你帮不上忙,没关系。你不需要保持警惕。我确实尝试了您发布的任何重复内容,但没有成功。查看我的编辑。
【参考方案1】:
您需要将日期转换为存储在数据库中的 ISO 格式,然后才能使用。
【讨论】:
在做这个改变 " "$gte": lastDate.toISOString() " 之后,现在我没有得到任何记录。在保存日期时还需要注意什么以确保它有效? 数据库中保存的日期格式是什么? 它的 ISO 日期格式 ok.. 而不是 '.toISOString()' 使用 moment(lastDate).format();以上是关于猫鼬嵌套查找不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章