2013-04-11 67 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);