如何从Mongo ObjectID中提取创build的date

我正在使用Mongo shell来查询我的Mongo数据库。 我想使用包含在ObjectID中的时间戳作为我的查询的一部分,也作为提取到输出的列。 我已经build立了Mongo来自己创buildObjectID。

我的问题是我无法find如何使用ObjectID来提取其时间戳。

这是我正在尝试工作的查询。 “createdDate”字段是占位符; 不知道什么是正确的领域是:

//Find everything created since 1/1/2011 db.myCollection.find({date: {$gt: new Date(2011,1,1)}}); //Find everything and return their createdDates db.myCollection.find({},{createdDate:1}); 

getTimestamp()

你需要的function就是这个,它已经包含在你的shell中了:

 ObjectId.prototype.getTimestamp = function() { return new Date(parseInt(this.toString().slice(0,8), 16)*1000); } 

参考

查看文档中的这一部分:

  • 从_id中提取插入时间,而不是有一个单独的时间戳字段

这个unit testing也是一样的:

  • mongo / jstests / objid6.js

使用Mongo shell的例子:

 > db.col.insert( { name: "Foo" } ); > var doc = db.col.findOne( { name: "Foo" } ); > var timestamp = doc._id.getTimestamp(); > print(timestamp); Wed Sep 07 2011 18:37:37 GMT+1000 (AUS Eastern Standard Time) > printjson(timestamp); ISODate("2011-09-07T08:37:37Z") 

这个问题有助于理解如何在查询情况下使用_id的embedded式时间戳(参考Mongo Extended JSON文档)。 这是如何完成的:

 col.find({..., '_id' : {'$lt' : {'$oid' : '50314b8e9bcf000000000000'}} }) 

find比oid给出的文档更早创build的文档。 与自然sorting和限制一起使用,您可以利用BSON _ids来创build类似Twitter的API查询( 给我最后的OID,我将提供二十多个

在Python中你可以这样做:

 >>> from bson.objectid import ObjectId >>> gen_time = datetime.datetime(2010, 1, 1) >>> dummy_id = ObjectId.from_datetime(gen_time) >>> result = collection.find({"_id": {"$lt": dummy_id}}) 

我认为,ObjectId.from_datetime() – 它是一个标准bson lib的有用方法也许其他语言绑定有替代内置函数。 资料来源: http : //api.mongodb.org/python/current/api/bson/objectid.html