2013-04-11 68 views
0

我正在使用上述技术构建我的第一个应用程序。我已经花了几个星期使用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”,错误:“发生错误”}

+0

不知道这是好事还是正确的答案,但你尝试过:'新BSON.ObjectID(parseInt函数(ID,10))}' ? – 2013-04-11 04:42:10

回答

2

尝试删除项目中的_id成员。 所以第3行应该成为继4号线:

exports.updateMenu = function(req, res) { 
    var id = req.params._id; 
    var item = req.body; 
    delete(item._id);