我从ObjectId — MongoDB Manual了解到,任何mongodb对象id的前4个字节都是创建时间戳。
从mongoose中提取信息的任何得到很好的支持方式?
答案 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',
}}}}
]
)