从mongodb id获取时间戳

Har*_*rry 55 javascript mongodb

如何从MongoDB id获取时间戳?

Kol*_*lja 111

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

所以你的时间戳是:

timestamp = _id.toString().substring(0,8)
Run Code Online (Sandbox Code Playgroud)

date = new Date( parseInt( timestamp, 16 ) * 1000 )
Run Code Online (Sandbox Code Playgroud)


小智 59

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

你可以在mongo shell中一步完成这一切:

document._id.getTimestamp();
Run Code Online (Sandbox Code Playgroud)

这将返回Date对象.

  • 还有python:`document_id.generation_time` (2认同)

Eri*_*ski 25

通过演练获取mongoDB集合项的时间戳:

时间戳深埋在mongodb物体的内部.跟着走,保持冷淡.

登录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
Run Code Online (Sandbox Code Playgroud)

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

> db.penguins.insert({"penguin": "skipper"})
> db.penguins.insert({"penguin": "kowalski"})
> 
Run Code Online (Sandbox Code Playgroud)

检查它是否存在:

> show dbs
local      0.078125GB
penguins   0.203125GB
Run Code Online (Sandbox Code Playgroud)

让我们把这个数据库变成现在的数据库

> use penguins
switched to db penguins
Run Code Online (Sandbox Code Playgroud)

给自己一个ISODate:

> ISODate("2013-03-01")
ISODate("2013-03-01T00:00:00Z")
Run Code Online (Sandbox Code Playgroud)

打印一些json:

> printjson({"foo":"bar"})
{ "foo" : "bar" }
Run Code Online (Sandbox Code Playgroud)

获取行:

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

我们只想检查一行

> db.penguins.findOne()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
Run Code Online (Sandbox Code Playgroud)

获取该行的_id:

> db.penguins.findOne()._id
ObjectId("5498da1bf83a61f58ef6c6d5")
Run Code Online (Sandbox Code Playgroud)

从_id对象获取时间戳:

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

获取上次添加记录的时间戳:

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

示例循环,打印字符串:

> db.penguins.find().forEach(function (doc){ print("hi") })
hi
hi
Run Code Online (Sandbox Code Playgroud)

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

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

循环,获取系统日期:

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

循环,获取每行的日期:

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

过滤到只有日期

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

仅针对字符串进一步过滤:

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

打印一个裸日,获取其类型,指定日期:

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

将日期实例转换为yyyy-MM-dd

> print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate())
2014-1-1
Run Code Online (Sandbox Code Playgroud)

每行以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
Run Code Online (Sandbox Code Playgroud)

toLocaleDateString更简洁:

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

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

获取最后添加的行的日期:

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

完成后删除数据库:

> use penguins
switched to db penguins
> db.dropDatabase()
{ "dropped" : "penguins", "ok" : 1 }
Run Code Online (Sandbox Code Playgroud)

确保它消失了:

> show dbs
local   0.078125GB
test    (empty)
Run Code Online (Sandbox Code Playgroud)

现在你的MongoDB是webscale.

  • 虽然可能很有趣,但解决这个问题的答案的唯一部分是"从_id对象中获取时间戳"...... (7认同)

web*_*ter 5

这是适合大家的快速php函数;)

public static function makeDate($mongoId) {

    $timestamp = intval(substr($mongoId, 0, 8), 16);

    $datum = (new DateTime())->setTimestamp($timestamp);

    return $datum->format('d/m/Y');
}
Run Code Online (Sandbox Code Playgroud)


pok*_*008 5

服务器端制作_idMongoDB 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);
};
Run Code Online (Sandbox Code Playgroud)