Getting timestamp from mongodb id
如何从MongoDB ID获取时间戳?
时间戳记包含在mongoDB ID的前4个字节中(请参阅:http://www.mongodb.org/display/DOCS/Object+ID)。
因此,您的时间戳是:
1 | timestamp = _id.toString().substring(0,8) |
和
1 | date = new Date( parseInt( timestamp, 16 ) * 1000 ) |
从Mongo 2.2开始,这种情况已经改变(请参阅:http://docs.mongodb.org/manual/core/object-id/)
您可以在mongo shell内一步完成全部操作:
1 | document._id.getTimestamp(); |
这将返回一个Date对象。
通过演练从mongoDB集合项获取时间戳:
时间戳被埋在mongodb对象的肠子深处。跟随并保持霜冻。
登录到mongodb shell
1 2 3 | ubuntu@ip-10-0-1-223:~$ mongo 10.0.1.223 MongoDB shell version: 2.4.9 connecting to: 10.0.1.223/test |
通过插入项目创建数据库
1 2 3 | > db.penguins.insert({"penguin":"skipper"}) > db.penguins.insert({"penguin":"kowalski"}) > |
检查是否存在:
1 2 3 | > show dbs local 0.078125GB penguins 0.203125GB |
让该数据库成为我们现在使用的数据库
1 2 | > use penguins switched to db penguins |
获取ISODate:
1 2 | > ISODate("2013-03-01") ISODate("2013-03-01T00:00:00Z") |
打印一些json:
1 2 | > printjson({"foo":"bar"}) {"foo" :"bar" } |
获取行:
1 2 3 | > db.penguins.find() {"_id" : ObjectId("5498da1bf83a61f58ef6c6d5"),"penguin" :"skipper" } {"_id" : ObjectId("5498da28f83a61f58ef6c6d6"),"penguin" :"kowalski" } |
我们只想检查一行
1 2 | > db.penguins.findOne() {"_id" : ObjectId("5498da1bf83a61f58ef6c6d5"),"penguin" :"skipper" } |
获取该行的_id:
1 2 | > db.penguins.findOne()._id ObjectId("5498da1bf83a61f58ef6c6d5") |
从_id对象获取时间戳:
1 2 | > db.penguins.findOne()._id.getTimestamp() ISODate("2014-12-23T02:57:31Z") |
获取最后添加的记录的时间戳:
1 2 | > 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) |
示例循环,打印字符串:
1 2 3 | > db.penguins.find().forEach(function (doc){ print("hi") }) hi hi |
示例循环与find()一样,打印行
1 2 3 | > db.penguins.find().forEach(function (doc){ printjson(doc) }) {"_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"),"penguin" :"skipper" } {"_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"),"penguin" :"kowalski" } |
循环,获取系统日期:
1 2 3 4 5 6 7 8 9 10 11 | > 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") } |
循环,获取每一行的日期:
1 2 3 4 5 6 7 8 9 10 11 | > 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") } |
仅过滤日期
1 2 3 | > 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") |
仅对字符串进一步过滤:
1 2 3 | > 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) |
打印空日期,获取其类型,分配日期:
1 2 3 4 5 6 | > 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") |
将日期实例转换为yyyy-MM-dd
1 2 | > print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()) 2014-1-1 |
每行以yyyy-MM-dd格式获取:
1 2 3 | > 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比较简短:
1 2 3 | > 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格式获取每一行:
1 2 3 | > 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 |
获取最后添加的行的日期:
1 2 | > 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) |
完成后删除数据库:
1 2 3 4 | > use penguins switched to db penguins > db.dropDatabase() {"dropped" :"penguins","ok" : 1 } |
确保它不存在:
1 2 3 | > show dbs local 0.078125GB test (empty) |
现在您的MongoDB是webscale。
这是适合大家的快速php函数;)
1 2 3 4 5 6 7 8 | public static function makeDate($mongoId) { $timestamp = intval(substr($mongoId, 0, 8), 16); $datum = (new DateTime())->setTimestamp($timestamp); return $datum->format('d/m/Y'); } |
在服务器端,使MongoDB ObjectId为
并在客户端使用
1 2 3 | var dateFromObjectId = function (objectId) { return new Date(parseInt(objectId.substring(0, 8), 16) * 1000); }; |