【发布时间】:2012-11-15 15:27:57
【问题描述】:
我有一个如下所示的集合:
{
_id: ObjectId("50a68673476427844b000001"),
other fields
}
我想做一个范围查询来查找两个日期之间的记录。我知道我可以从 mongo shell var 中的 ObjectId 获取日期:
var aDate = ObjectId().getTimestamp()
但没有办法(据我目前所知)创建仅包含时间戳部分的 ObjectId - 我认为我理想的解决方案是无法正常工作的 mongo shell 代码:
var minDate = ObjectId(new Date("2012-11-10"));
var maxDate = ObjectId(new Date("2012-11-17"));
使用以 minDate 和 MaxDate 作为范围值的查找。
有没有办法在 SHELL 中做到这一点 - 我对某些驱动程序产品不感兴趣。
【问题讨论】:
-
mongoid 的前 8 个字节是十六进制的时间戳,因此您可以创建一个有效的 ObjectId,其中前 8 个字节从日期开始,然后只剩下零,然后执行类似以下的查询:
{ _id: {$gt: ObjectId("5087e5b106cffca815000000")} } -
Can I query MongoDB ObjectId by date? 有一个很好的答案,其中包括一个
objectIdWithTimestamp()JavaScript 函数。您可以将此功能保存在您的.mongorc.js 中,以便在启动时在您的mongoshell 中使用它。 -
这能回答你的问题吗? Can I query MongoDB ObjectId by date?
标签: mongodb mongodb-shell