MongoDB将创建的时间戳存储在主键字段_id ObjectId中。该字段已编入索引。
我需要按日期(而不是创建日期)存储和过滤文档,我想利用这个字段。
如何使用自定义日期生成唯一的ObjectIds?我应该这样做吗?或者我应该为我的日期创建另一个字段并将其编入索引。
答案 0 :(得分:0)
MongoDB自动生成ObjectId,并在创建新文档时在文档的 _id 字段中填充它。
根据MongoDB文档
ObjectId是一个12字节的BSON类型,具有以下结构:
前4个字节表示自unix时期以来的秒数
接下来的3个字节是机器标识符
接下来的2个字节由进程ID
组成最后3个字节是随机计数器值
以下是用于生成ObjectId
的代码段Object_id = ObjectId()
我们还可以指定12字节自定义ID来生成ObjectId
Object_id = ObjectId("5349b4ddd2781d08c09890f4")
答案 1 :(得分:0)
对于希望为自定义时间戳创建新的mongo objectId的人们,将以下内容用于mongoose库
const mongoose = require('mongoose');
let anyTimeInMillisecs = Date.now();
var thisTimeStamp = Math.floor(anyTimeInMillisecs / 1000);
var newObjId = new mongoose.Types.ObjectId(thisTimeStamp); //our custom object ID