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()
.
的解决方案
我正在尝试使用罗盘对 _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()
.