1

我正在使用 mongodb、node.js 和 socket.io,我正在尝试减少访问数据库的次数。我需要更新一行;在返回更新的行之后,我就是这样做的:

db.collection('users').update({_id:targetID}, {$set: { 'property': 'value' }}, {safe:true}, function(err, result) {
    db.collection('users').find({_id:targetID}).toArray(function(error, results){
        //a socket.io resend the content
    });
});

它有效,但我真的觉得我在这里迈出了无用的一步。更新函数的回调似乎是一个布尔值。

顺便说一句,有没有比这个更好的文档:http: //docs.mongodb.org/manual/applications/update/?我想找到属性和方法的列表。例如{safe:true}。没有它似乎无法工作,但我在参考中找不到它。

也许我完全错了,这不是我应该这样做的方式。如果你有更好的主意... :)

4

1 回答 1

5

您可以使用它findAndModify来有效地执行此操作:

db.collection('users').findAndModify(
    {_id: targetID}, [], 
    {$set: { 'property': 'value' }}, 
    {new: true}, // Return the updated doc rather than the original
    function(err, result) {
        // result contains the updated document
    }
);
于 2012-12-27T17:24:57.717 回答