在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
函数DELETE
和findOne
文档。但是,当我尝试使用mongoDB deleteOne
/ PUT
函数updateOne
时,我收到此错误(服务器端):
_id字段无法从{_id:ObjectId(' 56d4d71191fdc81100974d0b')}更改为{_id:" 56d4d71191fdc81100974d0b"}。
似乎很奇怪,因为我在update
的服务器代码中使用与updateOne
中相同的方法(同样,findOne
工作正常):
findOne
有什么建议吗?
答案 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();
}
});
});