猫鼬嵌套查找不起作用[重复]

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();

以上是关于猫鼬嵌套查找不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从猫鼬模型传递嵌套的 JSON 数据不起作用

使用数组过滤器更新多个嵌套数组在猫鼬中不起作用

猫鼬独特:真的不起作用[重复]

修改猫鼬对象文字结果不起作用[重复]

为啥嵌套的 z-index 不起作用[重复]

猫鼬 findByIdAndUpdate 不起作用。 new: true 包括