【发布时间】:2016-06-16 04:38:08
【问题描述】:
在 Heroku 上使用 MEAN Stack 部署,我可以使用 mongoDB 的 findOne 和 deleteOne 函数来处理 GET 和 DELETE 文档。但是,当我尝试使用 mongoDB updateOne/update 函数 PUT 一个文档时,我收到此错误(服务器端):
_id 字段不能从 {_id: ObjectId('56d4d71191fdc81100974d0b')} 更改为 {_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();
}
});
});
有什么建议吗?
【问题讨论】:
-
您正在进行更新,并且您更新的文档包含一个 _id,Mongo 不喜欢这样。从 updateDoc 中删除 _id:
delete updateDoc._jd.
标签: node.js mongodb heroku mean-stack objectid