使用带有 findOneAndUpdate 的唯一字段更新文档抛出异常
update document using a unique filed with findOneAndUpdate is thorwing exception
我是 node.js 的新手,意思是。
我在文档中有将近 20 个字段要更新。
var UserSchema = mongoose.model('UserSchema');
我正在 request body
中传递这 20 个字段并更新 UserSchema
模型对象。
var newUser =new UserSchema(req.body);
实际上我并没有从我的请求正文中传递 _id
,但是当我看到我的 newUser._id
时它填充了一些 id,所以它导致了一个名为
的错误
exception: After applying the update to the document {_id: ObjectId('560e506ad4369d2a02a6ad6d') , ...}, the (immutable) field '_id' was found to have been altered to _id: ObjectId('560e65f395857e210313d3a7')
UserSchema.findOneAndUpdate({ userName: newUser.userName }, newUser, { new: true }, function (err, newuser) {
if (err) {
console.log(err);
return res.status(400).json({ message: err });
}
return res.status(200).json({ result: newUser });
});
因为您正在通过以下语句创建新记录集,
var newUser =new UserSchema(req.body);
以上语句将 req.body
提供的所有字段与 UserSchema
模型的注册架构相匹配,并将为其生成新的 ObjectId
。所以 newUser
变量有 _id
字段,当你尝试用 newUser
更新现有记录时,它会导致错误,因为你试图更改不可变的 _id
字段。
相反,您可以按如下方式重写整个内容,
var UserSchema = mongoose.model('UserSchema');
var newUser = req.body;
UserSchema.findOneAndUpdate({ userName: newUser.userName }, newUser, { new: true }, function (err, newuser) {
if (err) {
console.log(err);
return res.status(400).json({ message: err });
}
return res.status(200).json({ result: newUser });
});
如果提供的记录不存在,那么 findOneAndUpdate
将根据您提供的 new: true
标志插入新记录。
我是 node.js 的新手,意思是。
我在文档中有将近 20 个字段要更新。
var UserSchema = mongoose.model('UserSchema');
我正在 request body
中传递这 20 个字段并更新 UserSchema
模型对象。
var newUser =new UserSchema(req.body);
实际上我并没有从我的请求正文中传递 _id
,但是当我看到我的 newUser._id
时它填充了一些 id,所以它导致了一个名为
exception: After applying the update to the document {_id: ObjectId('560e506ad4369d2a02a6ad6d') , ...}, the (immutable) field '_id' was found to have been altered to _id: ObjectId('560e65f395857e210313d3a7')
UserSchema.findOneAndUpdate({ userName: newUser.userName }, newUser, { new: true }, function (err, newuser) {
if (err) {
console.log(err);
return res.status(400).json({ message: err });
}
return res.status(200).json({ result: newUser });
});
因为您正在通过以下语句创建新记录集,
var newUser =new UserSchema(req.body);
以上语句将 req.body
提供的所有字段与 UserSchema
模型的注册架构相匹配,并将为其生成新的 ObjectId
。所以 newUser
变量有 _id
字段,当你尝试用 newUser
更新现有记录时,它会导致错误,因为你试图更改不可变的 _id
字段。
相反,您可以按如下方式重写整个内容,
var UserSchema = mongoose.model('UserSchema');
var newUser = req.body;
UserSchema.findOneAndUpdate({ userName: newUser.userName }, newUser, { new: true }, function (err, newuser) {
if (err) {
console.log(err);
return res.status(400).json({ message: err });
}
return res.status(200).json({ result: newUser });
});
如果提供的记录不存在,那么 findOneAndUpdate
将根据您提供的 new: true
标志插入新记录。