MongoDB objectID stranger错误

时间:2016-03-03 02:48:14

标签: node.js mongodb heroku mean-stack objectid

在Heroku上使用MEAN Stack部署我能够使用mongoDB的def populate_table(table_name, data): #Grab first tuple and find out how many columns are expected to be edited num_columns = len(data[0]) try: cursor.executemany("INSERT INTO {} VALUES({})".format(table_name, ','.join(['?' for s in xrange(num_columns)]), data) conn.commit() except sqlite3.OperationalError: ... GET函数DELETEfindOne文档。但是,当我尝试使用mongoDB deleteOne / PUT函数updateOne时,我收到此错误(服务器端):

  

_id字段无法从{_id:ObjectId(' 56d4d71191fdc81100974d0b')}更改为{_id:" 56d4d71191fdc81100974d0b"}。

似乎很奇怪,因为我在update的服务器代码中使用与updateOne中相同的方法(同样,findOne工作正常):

findOne

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我认为您在var updateDoc = req.body

时遇到了问题

由于req.body包含id字段,并且您正在通过该id从对象进行搜索,mongodb认为您正在尝试更新 id字段也是不允许的。

一种解决方案是从updateDoc对象中删除id字段。 e.g。

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();
    }
  });
});