使用backbone和node.js更新mongo db

时间:2013-04-11 04:32:28

标签: node.js mongodb backbone.js

我正在使用上述技术构建我的第一个应用程序。我在过去几周使用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",错误:"发生错误" }

1 个答案:

答案 0 :(得分:2)

尝试从项目中删除_id成员。 所以前3行应该成为以下4行:

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