2014-06-18 11 views
6

Dla MongoDB Szukam aktualizacji atomowej, która zwiększy pole, a jeśli ten krok przekroczy maksymalną liczbę, poda tę maksymalną liczbę. Takie samo zachowanie można osiągnąć za pomocą kombinacji operatorów $ inc i $ min, ale niestety nie w jednej aktualizacji atomowej. Spójrz na przykład poniżej.Zwiększenie pola MongoDB z warunkiem maksymalnym w instrukcji aktualizacji

Przykład dokument

{ 
    "_id": 1, 
    "i": 0 
} 

Zapytania

db.test.update({_id:1}, {$set:{"a":"foo"}, $inc:{i:1}}); db.test.update({_id:1}, {$min:{i:2}}); 
db.test.update({_id:1}, {$set:{"b":"bar"}, $inc:{i:1}}); db.test.update({_id:1}, {$min:{i:2}}); 
db.test.update({_id:1}, {$set:{"c":"baz"}, $inc:{i:1}}); db.test.update({_id:1}, {$min:{i:2}}); 

dokument Wynik

{ 
    "_id": 1, 
    "i": 2, 
    "a": "foo", 
    "b": "bar", 
    "c": "baz" 
} 

Aktualizacja

Dzięki Christian P odpowiedź Zdałem sobie sprawę, że zapomniałem wspomnieć o jeszcze jednym stanie. Potrzebuję aktualizacji dokumentu, ponieważ potrzebuję zaktualizować więcej pól niż pokazano w przykładzie. W rzeczywistości potrzebuję sufitu przyrostowego (maksymalnego) w instrukcji aktualizacji. Zaktualizowałem mój przykład, aby to wyjaśnić.

Odpowiedz

5

Patrzysz na polecenie findAndModify:

db.test.findAndModify({ 
    query: { _id: 1, i: { $lt: 2 } }, 
    update: { $inc: { i: 1 } } 
}) 

To zapytanie będzie aktualizować dokument tylko wtedy i nie jest większa niż maksymalna podana wartość ..

+0

Dzięki za odpowiedź,” w porządku. Ale zapominam wyjaśnić w pytaniu, że faktycznie potrzebuję zaktualizować więcej pól za pomocą zapytania, więc nie mogę po prostu wykluczyć żadnego dokumentu z aktualizacji zobacz aktualizację mojego pytania. –

Powiązane problemy