/ / ReactiveMongo: Verwendung von FindAndModify, um ein Dokument zu lesen und einen Wert atomar zu erhöhen - Mongodb, Scala, ReactiveMongo

ReactiveMongo: Wie FindAndModify verwendet wird, um ein Dokument zu lesen und einen Wert atomar zu erhöhen - mongodb, scala, reactivemongo

Ich muss ein Dokument lesen und einen Wert atomar erhöhen. Ich weiß, ReactiveMongo bietet FindAndModify und schaute zu Dieses Beispiel. Wenn Sie auf die findAndModify Methode im Beispiel werden Sie feststellen, dass nur die Dokumente gefunden werden, die mit einer Bedingung übereinstimmen, und sie dann mit einem neuen Wert aktualisiert werden.

Wie stelle ich einen neuen Wert basierend auf dem alten ein? Mit anderen Worten, ich muss einen Wert lesen, inkrementieren und schließlich das Dokument [atomar] aktualisieren:

def incrementValue() = {
val selector = BSONDocument("name" -> "Joe")
val modifier = BSONDocument(
"$set" -> BSONDocument("version" -> ???)) // how do I increment the old
// value of "version" by 1?
val command = FindAndModify(
collection.name,
selector,
Update(modifier, false))

Antworten:

2 für die Antwort № 1

Benutzen $inc Anstatt von $set. Hier finden Sie die Dokumentation. Natürlich funktioniert es auch mit findAndModify.