mongodb 对象 ID 在日期范围内的罗盘查询

mongodb compass query with objectId in date range

我正在尝试使用罗盘对 _id 字段执行日期范围查询。 我已经使用以下过滤器尝试了我发现的 here

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

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

您需要将日期对象传递给 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 版本。您可以查看 the docs here.

此外,请查看此相关主题:Can I query MongoDB ObjectId by date?

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

我找到了一个解决方案,也许不是最好的,但它确实有效。如果没有更清洁的解决方案,希望这可以帮助遇到同样问题的人。

我将我需要的日期转换为罗盘之外的 ObjectId online here。 然后我用那个 ObjectId 写了查询:

{_id: { $gte: ObjectId(' object id here ') } }

如评论中所建议,请参阅 this related topic。它不特定于 Compass,但它提供了一种从日期生成 ObjectId 而不依赖于 ObjectId.fromDate().

的解决方案