我从ObjectId — MongoDB Manual中了解到,任何 mongodb 对象 id 的前 4 个字节都是创建时间戳。
从猫鼬中提取该信息的任何受支持的方法?
我从ObjectId — MongoDB Manual中了解到,任何 mongodb 对象 id 的前 4 个字节都是创建时间戳。
从猫鼬中提取该信息的任何受支持的方法?
我相信 ObjectId 有一个 getTimestamp() 方法;例如
_id.getTimestamp()
您可以在使用 _id 获取创建时间戳的 mongoose 模式上创建一个虚拟的“created”属性。只需添加:
YourMongooseSchema.virtual('created').get( function () {
if (this["_created"]) return this["_created"];
return this["_created"] = this._id.getTimestamp();
});
如果你运行这个,你会得到时间戳
console.log(new mongoose.Types.ObjectId().getTimestamp() );
例如。
Fri Nov 16 2012 17:20:14 GMT+0000 (GMT)
var timestamp = document._id.toString().substring(0,8);
var date = new Date( parseInt( timestamp, 16 ) * 1000 );
对于时间戳
_id.getTimestamp()
对于 ISO 格式的日期
_id.getTimestamp().toISOString()
如果有人想将时间戳转换为日期字符串,这可能很有用。通过使用 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/
_id.getTimestamp()
对我不起作用,但
_id.Time()
完美运行
如果要在聚合或更新查询中进行转换,可以使用$convert运算符并转换_id
为date
.
例子:
db.users.updateMany({
created: {$exists: false},
}, [
{$set: {created: {$convert: {
input: '$_id',
to: 'date',
}}}}
]
)