📅  最后修改于: 2023-12-03 15:03:02.473000             🧑  作者: Mango
在 MongoDB 中,每个文档都有一个独一无二的 _id 字段,它默认是一个 ObjectId 对象。Mongoose 提供了一个 ObjectId 类,可以用来生成新的 _id。
可以使用以下方式在代码中生成一个新的 ObjectId:
const mongoose = require('mongoose');
const newId = new mongoose.Types.ObjectId();
console.log(newId); // 输出一个新的 ObjectId
可以在 Mongoose 模型中使用 ObjectId 作为默认的 _id 字段。只需要在定义 schema 的时候,将 _id 字段定义为 mongoose.Schema.Types.ObjectId。例如:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({
name: String,
}, {
_id: true, // 将 _id 设置为 true,表示使用默认的 _id 字段
timestamps: true, // 使用 timestamps,会默认生成 createdAt 和 updatedAt 字段
});
const User = mongoose.model('User', userSchema);
User.create({ name: '张三' }).then(user => {
console.log(user._id); // 这里的 _id 就是一个新的 ObjectId
});
如果需要自定义 ObjectId,可以传入一个 12 字节的 Buffer 数组。这个 Buffer 数组需要满足 MongoDB 对 ObjectId 的定义。例如:
const mongoose = require('mongoose');
const customBuffer = Buffer.alloc(12);
// 设置前 4 个字节为当前时间的时间戳
customBuffer.writeUInt32BE(Math.floor(Date.now() / 1000), 0);
// 设置 5-12 字节为随机数
for (let i = 4; i < 12; i++) {
customBuffer[i] = Math.floor(Math.random() * 256);
}
const customId = new mongoose.Types.ObjectId(customBuffer);
console.log(customId); // 输出一个自定义的 ObjectId
使用 Mongoose 的 ObjectId 类可以轻松地生成新的 _id 或者自定义 _id。在定义 Mongoose 模型时,也可以将 _id 设置为默认的 ObjectId 类型。