gpt4 book ai didi

node.js - MongoDB objectID 陌生人错误

转载 作者:可可西里 更新时间:2023-11-01 10:23:51 25 4
gpt4 key购买 nike

在 Heroku 上使用 MEAN Stack 部署,我能够使用 mongoDB 的 findOnedeleteOne GETDELETE 文档> 功能。但是,当我尝试使用 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();
}
});
});

关于node.js - MongoDB objectID 陌生人错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35762251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com