从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); };