【发布时间】: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 以格式日期存储在文档中
-
如果你帮不上忙,没关系。你不需要保持警惕。我确实尝试了您发布的任何重复内容,但没有成功。查看我的编辑。
标签: javascript mongodb mongoose nodes mean-stack