如果想要自己定义_id
,直接在Schema
中定义类型进行覆盖,默认是自动生成_id
(且类型为ObjectId
),示例:
const schema = mongoose.Schema({
_id: Number
})
且在定义schema
的options
中有一个_id参数可以用于控制是否生成_id
,但是由于mongoDB
中的文档都需要一个_id
,所以取消_id
生成的情况一般为子文档,例如:
const childSchema = new Schema({ name: String }, { _id: false });
const parentSchema = new Schema({ children: [childSchema] });
如果在schema
中定义_id
类型为mongoose.Schema.ObjectId
,则创建文档时就需要传入ObjectId
类型的_id
{
_id: mongoose.Types.ObjectId(id)
}
上面传递给ObjectId
构造函数的id
参数可以不传递,如果传递,id
必须为一个12字节的字符串或者24位的16进制字符(12字节字符串会被转化为16进制字符)
另一个options
中和_id
很像的参数—id
,它的作用是给文档设置一个虚拟属性id
用于获取ObjectId
类型_id的字符串格式
传递给findById
函数的_id
可以是字符串或者ObjectId
类型