【发布时间】:2019-04-15 04:52:23
【问题描述】:
我有这样的 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
}
【问题讨论】:
-
如果你能提供完整的代码就好了。我认为错误是来自另一个地方的东西,这里没有发布。您可以在这里发布您的
upsert代码吗? -
@HardikShah 确实我找到了问题,我会更新我的问题,谢谢
标签: node.js mongodb mongoose mongoose-schema