Wil*_*ham 10 mongodb mongodb-compass
我正在尝试使用指南针在字段上执行日期范围查询_id。我已经使用以下过滤器尝试了在这里找到的内容:
{_id: { $gte: ObjectId.fromDate(new Date('2019-01-01')) } }
Run Code Online (Sandbox Code Playgroud)
我缺少什么?我想获取从某个日期开始的所有文档的列表(在本例中是从 2019 年 1 月 1 日至今)。不幸的是,文档字段中没有时间戳,因此我需要从对象 ID 中提取它。
zhu*_*ien 14
您需要将日期对象传递给ObjectId.fromDate,而不是字符串。尝试这个:
ObjectId.fromDate(new Date('2019-01-01'))
Run Code Online (Sandbox Code Playgroud)
该函数仅在 shell 中起作用,在驱动程序中不存在。
这是一个也适用于 Compass 的解决方案:
{
$expr: {
$gte: [
{"$toDate":"$_id"},
ISODate("2021-01-01T00:00:00.000Z")
]
}
}
Run Code Online (Sandbox Code Playgroud)
但请记住,它需要4.0+mongo的版本。您可以在此处查看文档。
另外,请查看此相关主题:Can I query MongoDB ObjectId by date?
它与 无关,但它提供了从日期Compass生成 s 而不依赖于 的解决方案。ObjectIdObjectId.fromDate()
我找到了一个解决方案,也许不是最好的,但它可以完成工作。如果没有更干净的解决方案,希望这可以帮助遇到相同问题的人。
我将所需的日期转换为在线罗盘之外的 ObjectId 。然后我用该 ObjectId 编写了查询:
{_id: { $gte: ObjectId(' object id here ') } }
Run Code Online (Sandbox Code Playgroud)
根据评论中的建议,请参阅此相关主题。它并不特定Compass,但它提供了一种从日期生成ObjectIds 的解决方案,而不依赖于ObjectId.fromDate().
| 归档时间: |
|
| 查看次数: |
27790 次 |
| 最近记录: |