如何从mongoose中的对象id获取创建日期?

时间:2012-11-12 19:59:32

标签: mongodb mongoose

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

从mongoose中提取信息的任何得到很好的支持方式?

8 个答案:

答案 0 :(得分:52)

我相信ObjectId有一个getTimestamp()方法; e.g。

_id.getTimestamp()

答案 1 :(得分:7)

您可以创建一个virtual'已创建的'使用_id获取创建时间戳的mongoose模式的属性。 只需添加:

YourMongooseSchema.virtual('created').get( function () {
  if (this["_created"]) return this["_created"];
  return this["_created"] = this._id.getTimestamp();
});

答案 2 :(得分:3)

如果你运行它,你将得到timeStamp

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

例如

Fri Nov 16 2012 17:20:14 GMT+0000 (GMT)

答案 3 :(得分:1)

var timestamp = document._id.toString().substring(0,8);

var date = new Date( parseInt( timestamp, 16 ) * 1000 );

答案 4 :(得分:0)

_id.getTimestamp()

对我不起作用,但

_id.Time()

完美无缺

答案 5 :(得分:0)

用于时间戳

 _id.getTimestamp()

以ISO格式显示日期

_id.getTimestamp().toISOString()

答案 6 :(得分:0)

如果某人要将时间戳转换为日期字符串,这可能很有用。通过使用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/

答案 7 :(得分:0)

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

示例:

db.users.updateMany({
    created: {$exists: false},
}, [
    {$set: {created: {$convert: {
        input: '$_id',
        to: 'date',
    }}}}
]
)