MongoDB的objectID陌生人错误
在Heroku上使用MEAN Stack部署我能够通过mongoDB的findOne
和deleteOne
函数来GET
和DELETE
文档。 但是,当我尝试使用mongoDB updateOne
/ update
函数来放置文档时,我收到此错误(服务器端):
_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(); } }); });
有什么build议么?
我认为你有问题var updateDoc = req.body
由于req.body包含id字段,并且您正在从对象中search以通过该id进行更新,因此mongodb认为您正试图更新id字段,这是不允许的。
一个解决scheme是从你的updateDoc对象中删除id字段。 例如
delete updateDoc._id;
现在再试一次,看看它是否工作。
你的最终function应该看起来像
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托pipe的node.js应用程序使用New Relic吗? 如果不是的话,监测有什么好的select?
- 连接到Heroku node.js应用程序中的数据库,而无需在git上显示authentication详细信息
- 反应在Rails上 – ! 主控 – >主控(预接收勾拒)
- 使用node-mysql从heroku节点应用程序连接到Amazon RDS数据库
- Knex.js在本地插入工程,但不在Heroku部署上
- 1&1找不到Heroku应用的CNAME
- 设置Heroku环境variables而不重新启动应用程序
- 运行`npm install`时可以重写一个本地.npmrc吗?
- 端口超时部署环回应用程序到Heroku