如何从Mongo ObjectID中提取创建的日期

emi*_*zel 56 shell timestamp mongodb unix-timestamp

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

我的问题是我无法找到如何使用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});
Run Code Online (Sandbox Code Playgroud)

Chr*_*tow 95

getTimestamp()

你需要的功能是这个,它已经包含在shell中:

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

参考

从文档中查看此部分:

这个单元测试也说明了同样的情况:

使用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")
Run Code Online (Sandbox Code Playgroud)

  • 这在我检索数据后很有用,但我仍然没有看到如何将创建的日期用作查询参数.例如'给我在2011年1月1日之后创建的所有小部件'.也许我错过了什么? (6认同)
  • 你有一个如何从shell调用这个函数的例子吗?我试过类似_id.getTimestamp()的东西,但是Mongo并不喜欢它.谢谢. (2认同)

Ste*_*fan 16

这个问题有助于理解如何在查询情境中使用_id的嵌入式时间戳(请参阅Mongo Extended JSON文档).这就是它的完成方式:

col.find({..., 
     '_id' : {'$lt' : {'$oid' : '50314b8e9bcf000000000000'}} 
})
Run Code Online (Sandbox Code Playgroud)

查找比oid给出的文档更早创建的文档.与自然排序和限制一起使用,你可以利用BSON _ids创建类似Twitter的API查询(给我你最后的OID,我将再提供20个)

  • 设法让它在 Mongo shell 中工作:`db.tweets.find({ "_id" : { $gte : ObjectId("50d314e400000000000000000") } })` 并使用 C++ MongoDB 驱动程序和以下查询:` std::string qs = "{ \"_id\" : { $gte : { \"$oid\" : \"" + oid + "\" } } }"; std::auto_ptr<mongo::DBClientCursor> cursor = c.query("twitter.tweets", mongo::Query(qs));` (2认同)

es2*_*es2 5

在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}})
Run Code Online (Sandbox Code Playgroud)

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