2014-04-29 73 views
0

我想查找,修改並隨後保存MongoDB中的對象。它看起來像這樣:如何使用Node.JS驅動程序在mongodb中保存修改的對象

var message = req.body; 
db.collection('user', function(err, collection) { 
    collection.findOne({'facebook_id':req.params.facebook_id}, function(err, item) { 
    if(item) { 
     item.messages.push({'value': message.value, 'date': message.date}); 
     //save Object 
    } 
    }); 
}); 

如何保存我對數據庫所做的更改?

或者我應該改用.update()?這裏的問題是,我不想交換整個對象,但更多的東西插入到該對象的數組中。

感謝&最好, 馬克

回答

1
collection.update({'facebook_id':req.params.facebook_id}, 
    {$push: { messages: {'value': message.value, 'date': message.date} } }, function(err) { 

}); 

使用$推動運營商的值在數據庫中直接添加到一個數組。 http://docs.mongodb.org/manual/reference/operator/update/push/

請注意,這比更新整個對象更有效率,特別是對於大對象。

+0

謝謝!這聽起來很有效。如果修改過的數組本身位於另一個數組中,您還可以告訴我該怎麼做?比方說:'user.circles [j] .messages.push(message)'。 (我已經知道j)。 – Luxori

1
db.collection.update ({'facebook_id':req.params.facebook_id}, item, function (err) { 
    if (err) return next (err); 
}); 
+0

謝謝你的回答。所以我在.findeOne()的回調中調用.update。你能用幾句話解釋一下:如果(錯誤)返回下一個(錯誤);'確實? – Luxori

+0

有一個回調函數被傳遞給所有被頻繁稱爲「下一個」的快速應用程序的中間件。這與這個問題並不相關。你可以做任何你想要的錯誤 – JuJoDi

相關問題