我正在使用上述技術構建我的第一個應用程序。我已經花了幾個星期使用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