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

标签: javascript mongodb mongoose nodes mean-stack


【解决方案1】:

您需要将日期转换为存储在数据库中的 ISO 格式,然后才能使用。

【讨论】:

  • 在做这个改变 "{ "$gte": lastDate.toISOString() }" 之后,现在我没有得到任何记录。在保存日期时还需要注意什么以确保它有效?
  • 数据库中保存的日期格式是什么?
  • 它的 ISO 日期格式
  • ok.. 而不是 '.toISOString()' 使用 moment(lastDate).format();
猜你喜欢
  • 1970-01-01
  • 2019-10-12
  • 2014-01-16
  • 2021-03-23
  • 2019-07-20
  • 2016-11-04
  • 2015-10-06
  • 2021-10-17
  • 1970-01-01
相关资源
最近更新 更多