首页 > 解决方案 > 日期范围内带有objectId的mongodb指南针查询

问题描述

我正在尝试_id使用指南针对字段执行日期范围查询。我已经使用以下过滤器尝试了在这里找到的内容:

{_id: { $gte: ObjectId.fromDate(new Date('2019-01-01')) } }

我错过了什么?我想从某个日期(在此示例中为 2019 年 1 月 1 日至今)获取所有文档的列表。不幸的是,文档字段中没有时间戳,所以我需要从对象 id 中提取它。

标签: mongodbmongodb-compass

解决方案


您需要将日期对象传递给ObjectId.fromDate,而不是字符串。试试这个:

ObjectId.fromDate(new Date('2019-01-01'))

此功能仅在 shell 中有效,在驱动程序中不存在。

评论后编辑:

这是一个也适用于 Compass 的解决方案:

{ 
    $expr: { 
        $gte: [
            {"$toDate":"$_id"}, 
            ISODate("2021-01-01T00:00:00.000Z") 
        ]
    } 
}

但是请记住,它需要4.0+mongo的版本。您可以在此处查看文档

另外,请查看此相关主题:我可以按日期查询 MongoDB ObjectId 吗?

它不是关于Compass,但它提供了ObjectId从日期生成 s 的解决方案,而不依赖于ObjectId.fromDate().


推荐阅读