2014-12-27 10 views
0

該文檔聲明findAndModify將返回多個查詢(如果適用)。如何讓Mongo findOneAndModify只有一個文檔?

如何找到一個文檔並在一次調用中更新它?

+0

使用_id作爲查詢。它只會找到一個 – Disposer 2014-12-27 19:33:12

+0

如果我使用_id,它會期望有一個_id集。如何指定「any _id」? – quantumpotato 2014-12-27 19:34:47

+0

根據文檔findAndModify將只選擇一個文檔進行修改,並返回原始文檔。 – BatScream 2014-12-27 19:41:41

回答

0

您可以使用:

db.coll.find({query}).limit(1).forEach(function(item) 
{ 
    db.coll.findAndModify({_id : item._id}, update}); 
}) 

db.coll.find會發現你只是一個文件,你可以修改它。

db.coll.findOne({query})確實是db.coll.find({query})以下的語法,並且它在mongo中沒有性能優勢。

// findOne() method body. it uses find() method in it 
function (query, fields, options) { 
    var cursor = this.find(query, fields, -1, 0, 0, options); 
    if (!cursor.hasNext()) { 
     return null; 
    } 
    var ret = cursor.next(); 
    if (cursor.hasNext()) { 
     throw "findOne has more than 1 result!"; 
    } 
    if (ret.$err) { 
     throw "error " + tojson(ret); 
    } 
    return ret; 
} 
相關問題