我的Person模式如下:
const schema = new mongoose.Schema({
_id: Number,
name: String,
birthday: Date,
sex: String
});
schema.pre('findOneAndUpdate', async function (next) {
try {
let counter = await Counters.findByIdAndUpdate('person',
{
$inc: {
value: 1
}
},
{ new: true}
);
this._update._id = counter.value;
next();
}
catch (err) {
next(err);
}
});
问题是,当我尝试用findOneAndUpdate
和upsert: true
添加一些新人员时,它会生成CastError: Cast to ObjectId failed for value "18" at path "person"
。
我的_id
被定义为Number
,所以我不明白为什么它试图将其强制转换为ObjectId
?
更新:
我发现了问题,Person
模型在其他模型中被引用,但是我忘记更改其他模型中的ref类型...
person: {
type: Number, //HERE
ref: 'person',
required: true
}
答案 0 :(得分:0)
您可以更改_id
属性的类型,尽管这不是一个好方法,但实际上您无法更改该值,因为它是不可变且代表{{3} }文档的键。请记住,_id
对于MongoDB生命周期(如索引编制)非常重要。如果要更改 Entity 键,则可以创建其他属性,例如person_id
。
答案 1 :(得分:0)
_id是MongoDB的自动生成的属性。如果要添加ID属性的其他名称,例如“ personId”,或者可以使用MongoDB自动生成的ID,而无需创建单独的ID。