2014-04-29 42 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

相关问题