我正在使用上述技术构建我的第一个应用程序。我在过去几周使用Backbone度过了一段时间,现在我正尝试使用mongo db在节点上使用express构建api。 (注意,我现在只使用本机节点mongo模块。)
当我使用来自mongo的数据填充我的主干集合时,默认情况下它带有_id字段。在我尝试使用mongo更新文档之前没问题。 Backbone将_id作为字符串传回,它应该是一个对象id。 Mongo没有通过更新,因为它认为我试图更改你不允许做的_id。下面是我的函数副本,用数据更新mongo。
exports.updateMenu = function(req, res) {
var id = req.params._id;
var item = req.body;
db.collection('menu', function(err, collection) {
collection.update({'_id':new BSON.ObjectID(id)}, item, {safe:true}, function(err, result) {
if (err) {
console.log('Error updating menu: ' + err);
res.send({'error':'An error has occurred'});
} else {
console.log('' + result + ' document(s) updated');
res.send(item);
}
});
});
}
这是我得到的错误。如您所见,提供了_id的文档试图将_id更改为字符串。
更新菜单时出错:MongoError:无法更改旧文档的_id:{id:1,name:" Hotdog",cost:2.99,description:"大牛肉热狗,您可以选择奶酪和酱汁",类别:"食品",_id:ObjectId(' 51645e0bd63580bc6c000001')}新:{id:" 1",名称:&# 34; Hotdog",费用:" 77",描述:"大牛肉热狗,您可以选择奶酪和酱汁",类别:"食品",_id :" 51645e0bd63580bc6c000001",错误:"发生错误" }
答案 0 :(得分:2)
尝试从项目中删除_id成员。 所以前3行应该成为以下4行:
exports.updateMenu = function(req, res) {
var id = req.params._id;
var item = req.body;
delete( item._id );