我正在使用上述技术构建我的第一个应用程序。我已经花了几个星期使用Backbone,现在我正尝试使用mongo db在节点上使用express来构建api。 (注意,我现在只是使用本地节点mongo模块。)使用主干和node.js更新mongo db
当我使用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”,费用:2.99,说明:“大牛肉热狗,可选择奶酪和酱汁”,分类: “food”,_id:ObjectId('51645e0bd63580bc6c000001')} new:{id:“1”,name:“Hotdog”,费用:“77”,描述:“大牛肉热狗,可选择奶酪和酱汁” :“food”,_id:“51645e0bd63580bc6c000001”,错误:“发生错误”}
不知道这是好事还是正确的答案,但你尝试过:'新BSON.ObjectID(parseInt函数(ID,10))}' ? – 2013-04-11 04:42:10