21

我从ObjectId — MongoDB Manual中了解到,任何 mongodb 对象 id 的前 4 个字节都是创建时间戳。

从猫鼬中提取该信息的任何受支持的方法?

4

8 回答 8

66

我相信 ObjectId 有一个 getTimestamp() 方法;例如

_id.getTimestamp()
于 2012-11-12T21:30:10.937 回答
12

您可以在使用 _id 获取创建时间戳的 mongoose 模式上创建一个虚拟的“created”属性。只需添加:

YourMongooseSchema.virtual('created').get( function () {
  if (this["_created"]) return this["_created"];
  return this["_created"] = this._id.getTimestamp();
});
于 2015-02-11T15:56:35.057 回答
6

如果你运行这个,你会得到时间戳

console.log(new mongoose.Types.ObjectId().getTimestamp() );

例如。

Fri Nov 16 2012 17:20:14 GMT+0000 (GMT)
于 2012-11-16T17:20:52.163 回答
5
var timestamp = document._id.toString().substring(0,8);

var date = new Date( parseInt( timestamp, 16 ) * 1000 );
于 2018-05-15T10:23:31.827 回答
2

对于时间戳

 _id.getTimestamp()

对于 ISO 格式的日期

_id.getTimestamp().toISOString()
于 2019-02-07T08:26:00.670 回答
2

如果有人想将时间戳转换为日期字符串,这可能很有用。通过使用 moment.js 库,您可以轻松地从时间戳中获取日期。

例子

const timestamp = (new mongoose.Types.ObjectId).getTimestamp();

const formatted = moment(timestamp).format('DD MM YYYY, h:mm:ss a');

console.log(formatted);   // output => 09 06 2020, 11:26:27 pm

在 moment.js 中格式化日期的更多方法 https://momentjs.com/docs/#/parsing/string-format/

于 2020-06-09T18:11:17.880 回答
0
_id.getTimestamp()

对我不起作用,但

_id.Time()

完美运行

于 2017-06-05T08:39:33.097 回答
0

如果要在聚合或更新查询中进行转换,可以使用$convert运算符并转换_iddate.

例子:

db.users.updateMany({
    created: {$exists: false},
}, [
    {$set: {created: {$convert: {
        input: '$_id',
        to: 'date',
    }}}}
]
)
于 2021-08-07T12:55:43.560 回答