如何从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为_id
date = new Date( parseInt( _id.toString().substring(0,8), 16 ) * 1000 )
并在客户端使用
1
2 3 |
var dateFromObjectId = function (objectId) {
return new Date(parseInt(objectId.substring(0, 8), 16) * 1000); }; |