MongoDB objectID 陌生人错误
MongoDB objectID stranger Error
在 Heroku 上使用 MEAN Stack 部署,我能够 GET
和 DELETE
具有 mongoDB 的 findOne
和 deleteOne
功能的文档。但是,当我尝试使用 mongoDB updateOne
/update
函数 PUT
文档时,我收到此错误(服务器端):
The _id field cannot be changed from {_id: ObjectId('56d4d71191fdc81100974d0b')} to {_id: "56d4d71191fdc81100974d0b"}.
看起来很奇怪,因为我在 updateOne
的服务器代码中使用与 findOne
相同的方法(同样,findOne
工作正常):
app.get("/contacts/:id", function(req, res) {
db.collection(CONTACTS_COLLECTION).findOne({ _id: new ObjectID(req.params.id) }, function(err, doc) {
if (err) {
handleError(err.message, "Failed to get contact");
} else {
res.status(200).json(doc);
}
});
});
app.put("/contacts/:id", function(req, res) {
var updateDoc = req.body;
db.collection(CONTACTS_COLLECTION).updateOne({_id: new ObjectID(req.params.id)}, updateDoc, function(err, doc) {
if (err) {
handleError(err.message, "Failed to update contact");
} else {
res.status(204).end();
}
});
});
有什么建议吗?
我认为你在 var updateDoc = req.body
有问题
由于 req.body 包含 id 字段,并且您正在通过该 id 从要更新的对象中搜索,mongodb 认为您正在尝试更新
id 字段也是不允许的。
一种解决方案是从 updateDoc 对象中删除 id 字段。
例如
delete updateDoc._id;
现在再试一次,看看是否有效。
您的最终函数应该如下所示
app.put("/contacts/:id", function(req, res) {
var updateDoc = req.body;
delete updateDoc.id;
db.collection(CONTACTS_COLLECTION).updateOne({_id: new ObjectID(req.params.id)}, updateDoc, function(err, doc) {
if (err) {
handleError(err.message, "Failed to update contact");
} else {
res.status(204).end();
}
});
});
在 Heroku 上使用 MEAN Stack 部署,我能够 GET
和 DELETE
具有 mongoDB 的 findOne
和 deleteOne
功能的文档。但是,当我尝试使用 mongoDB updateOne
/update
函数 PUT
文档时,我收到此错误(服务器端):
The _id field cannot be changed from {_id: ObjectId('56d4d71191fdc81100974d0b')} to {_id: "56d4d71191fdc81100974d0b"}.
看起来很奇怪,因为我在 updateOne
的服务器代码中使用与 findOne
相同的方法(同样,findOne
工作正常):
app.get("/contacts/:id", function(req, res) {
db.collection(CONTACTS_COLLECTION).findOne({ _id: new ObjectID(req.params.id) }, function(err, doc) {
if (err) {
handleError(err.message, "Failed to get contact");
} else {
res.status(200).json(doc);
}
});
});
app.put("/contacts/:id", function(req, res) {
var updateDoc = req.body;
db.collection(CONTACTS_COLLECTION).updateOne({_id: new ObjectID(req.params.id)}, updateDoc, function(err, doc) {
if (err) {
handleError(err.message, "Failed to update contact");
} else {
res.status(204).end();
}
});
});
有什么建议吗?
我认为你在 var updateDoc = req.body
由于 req.body 包含 id 字段,并且您正在通过该 id 从要更新的对象中搜索,mongodb 认为您正在尝试更新 id 字段也是不允许的。
一种解决方案是从 updateDoc 对象中删除 id 字段。 例如
delete updateDoc._id;
现在再试一次,看看是否有效。
您的最终函数应该如下所示
app.put("/contacts/:id", function(req, res) {
var updateDoc = req.body;
delete updateDoc.id;
db.collection(CONTACTS_COLLECTION).updateOne({_id: new ObjectID(req.params.id)}, updateDoc, function(err, doc) {
if (err) {
handleError(err.message, "Failed to update contact");
} else {
res.status(204).end();
}
});
});