Mongodb:从 mongo shell 中的 ObjectId 执行日期范围查询

Posted

技术标签:

【中文标题】Mongodb:从 mongo shell 中的 ObjectId 执行日期范围查询【英文标题】:Mongodb: Perform a Date range query from the ObjectId in the mongo shell 【发布时间】: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 中,以便在启动时在您的mongo shell 中使用它。 这能回答你的问题吗? Can I query MongoDB ObjectId by date? 【参考方案1】:

您可以分两步完成:

 var objIdMin = ObjectId(Math.floor((new Date('1990/10/10'))/1000).toString(16) + "000
0000000000000")
 var objIdMax = ObjectId(Math.floor((new Date('2011/10/22'))/1000).toString(16) + "000
    0000000000000")
 db.myCollection.find(_id:$gt: objIdMin, $lt: objIdMax)

或一步完成(可读性较差):

db.myCollection.find(_id:$gt: ObjectId(Math.floor((new Date('1990/10/10'))/1000).toString(16) + "000
    0000000000000"), $lt: ObjectId(Math.floor((new Date('2011/10/10'))/1000).toString(16) + "000
    0000000000000"))

【讨论】:

甚至更好:function dateFromObj( strDate ) return ObjectId(Math.floor((new Date( strDate ))/1000).toString(16) + "0000000000000000") 【参考方案2】:

使用 mongo shell:

您可以使用 ObjectId.fromDate 内置方法:

db.mycollection.find(_id: $gt: ObjectId.fromDate( new Date('2017-09-23') )  );

来自 Node.js 驱动程序:

您可以使用@jksduahere提供的解决方案如下:

db.mycollection.find(_id: $gt: ObjectID.createFromTime( Date.now()/1000 )  );

【讨论】:

以上是关于Mongodb:从 mongo shell 中的 ObjectId 执行日期范围查询的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB学习第二篇 --- Mac下通过 Shell 执行 mongo 命令

MongoDB - The mongo Shell, mongo Shell Quick Reference

MongoDB - The mongo Shell, Configure the mongo Shell

怎么从linux 上的mongo备份

MongoDB - The mongo Shell, Data Types in the mongo Shell

MongoDB - The mongo Shell, Access the mongo Shell Help