从MongoDB ID获取时间戳

我如何从MongoDB ID获取时间戳?

时间戳包含在mongoDB id的前4个字节中(请参阅: http : //www.mongodb.org/display/DOCS/Object+IDs )。

所以你的时间戳是:

timestamp = _id.toString().substring(0,8) 

 date = new Date( parseInt( timestamp, 16 ) * 1000 ) 

从Mongo 2.2开始,这已经改变了(参见: http : //docs.mongodb.org/manual/core/object-id/ )

你可以在mongo shell里面一步完成:

 document._id.getTimestamp(); 

这将返回一个Date对象。

从mongoDB集合项获取时间戳,

时间戳被深埋在蒙古物体的肠内。 跟随,保持冷淡。

login到mongodb shell

 ubuntu@ip-10-0-1-223:~$ mongo 10.0.1.223 MongoDB shell version: 2.4.9 connecting to: 10.0.1.223/test 

通过插入项目来创build数据库

 > db.penguins.insert({"penguin": "skipper"}) > db.penguins.insert({"penguin": "kowalski"}) > 

检查是否有:

 > show dbs local 0.078125GB penguins 0.203125GB 

让我们现在正在使用的数据库

 > use penguins switched to db penguins 

给自己一个ISODate:

 > ISODate("2013-03-01") ISODate("2013-03-01T00:00:00Z") 

打印一些json:

 > printjson({"foo":"bar"}) { "foo" : "bar" } 

获取行:

 > db.penguins.find() { "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" } { "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" } 

我们只想检查一行

 > db.penguins.findOne() { "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" } 

获取该行的_id:

 > db.penguins.findOne()._id ObjectId("5498da1bf83a61f58ef6c6d5") 

从_id对象获取时间戳:

 > db.penguins.findOne()._id.getTimestamp() ISODate("2014-12-23T02:57:31Z") 

获取最后添加的logging的时间戳:

 > db.penguins.find().sort({_id:-1}).limit(1).forEach(function (doc){ print(doc._id.getTimestamp()) }) Tue Dec 23 2014 03:04:53 GMT+0000 (UTC) 

示例循环,打印string:

 > db.penguins.find().forEach(function (doc){ print("hi") }) hi hi 

示例循环与find()相同,可以打印行

 > db.penguins.find().forEach(function (doc){ printjson(doc) }) { "_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"), "penguin" : "skipper" } { "_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"), "penguin" : "kowalski" } 

循环,获取系统date:

 > db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = new Date(); printjson(doc); }) { "_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"), "penguin" : "skipper", "timestamp_field" : ISODate("2014-12-23T03:15:56.257Z") } { "_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"), "penguin" : "kowalski", "timestamp_field" : ISODate("2014-12-23T03:15:56.258Z") } 

循环,得到每一行的date:

 > db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = doc._id.getTimestamp(); printjson(doc); }) { "_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"), "penguin" : "skipper", "timestamp_field" : ISODate("2014-12-23T03:04:41Z") } { "_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"), "penguin" : "kowalski", "timestamp_field" : ISODate("2014-12-23T03:04:53Z") } 

过滤只是date

 > db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = doc._id.getTimestamp(); printjson(doc["timestamp_field"]); }) ISODate("2014-12-23T03:04:41Z") ISODate("2014-12-23T03:04:53Z") 

进一步滤除string:

 > db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = doc._id.getTimestamp(); print(doc["timestamp_field"]) }) Tue Dec 23 2014 03:04:41 GMT+0000 (UTC) Tue Dec 23 2014 03:04:53 GMT+0000 (UTC) 

打印一个空的date,得到它的types,分配一个date:

 > print(new Date()) Tue Dec 23 2014 03:30:49 GMT+0000 (UTC) > typeof new Date() object > new Date("11/21/2012"); ISODate("2012-11-21T00:00:00Z") 

将date实例转换为yyyy-MM-dd

 > print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()) 2014-1-1 

以yyyy-MM-dd格式获取每一行:

 > db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()) }) 2014-12-23 2014-12-23 

toLocaleDateString很简短:

 > db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.toLocaleDateString()) }) Tuesday, December 23, 2014 Tuesday, December 23, 2014 

获取yyyy-MM-dd的每一行HH:mm:ss格式:

 > db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()) }) 2014-12-23 3:4:41 2014-12-23 3:4:53 

获取最后添加的行的date:

 > db.penguins.find().sort({_id:-1}).limit(1).forEach(function (doc){ print(doc._id.getTimestamp()) }) Tue Dec 23 2014 03:04:53 GMT+0000 (UTC) 

完成后删除数据库:

 > use penguins switched to db penguins > db.dropDatabase() { "dropped" : "penguins", "ok" : 1 } 

确保它消失了:

 > show dbs local 0.078125GB test (empty) 

外星人来了,只有你的MongoDB熟练才能救我们。

这里有一个快速的PHP函数为你所有;)

 public static function makeDate($mongoId) { $timestamp = intval(substr($mongoId, 0, 8), 16); $datum = (new DateTime())->setTimestamp($timestamp); return $datum->format('d/m/Y'); } 

服务器端 make _id MongoDB ObjectId

date = new Date( parseInt( _id.toString().substring(0,8), 16 ) * 1000 )

并在客户端使用

 var dateFromObjectId = function (objectId) { return new Date(parseInt(objectId.substring(0, 8), 16) * 1000); };