Я получаю следующий список документов из MongoDB, когда я нахожусь для "campaignID":"DEMO-1"
.Как обновить документ с помощью ReactiveMongo
[
{
"_id": {
"$oid": "56be0e8b3cf8a2d4f87ddb97"
},
"campaignID": "DEMO-1",
"revision": 1,
"action": [
"kick",
"punch"
],
"transactionID": 20160212095539543
},
{
"_id": {
"$oid": "56c178215886447ea261710f"
},
"transactionID": 20160215000257159,
"campaignID": "DEMO-1",
"revision": 2,
"action": [
"kick"
],
"transactionID": 20160212095539578
}
]
Теперь, что я пытаюсь сделать здесь для данного campaignID
мне нужно найти все его версии (ревизии в моем случае) и изменить action
поле для dead
типа String. Я читал документы, и примеры, которые у них есть, слишком просто не слишком полезны в моем случае. Это то, что говорят документы:
val selector = BSONDocument("name" -> "Jack")
val modifier = BSONDocument(
"$set" -> BSONDocument(
"lastName" -> "London",
"firstName" -> "Jack"),
"$unset" -> BSONDocument(
"name" -> 1))
// get a future update
val futureUpdate = collection.update(selector, modifier)
Я не могу просто следовать документам, потому что его легко создать новый BSON документ и использовать его, чтобы изменить следующие структуры BSON путем жесткого кодирования точных полей. В моем случае мне нужно сначала найти документы, а затем изменить поле action
на лету, потому что в отличие от документов мое поле action
может иметь разные значения.
Вот мой код до сих пор, которые, очевидно, не компилируется:
def updateDocument(campaignID: String) ={
val timeout = scala.concurrent.duration.Duration(5, "seconds")
val collection = db.collection[BSONCollection](collectionName)
val selector = BSONDocument("action" -> "dead")
val modifier = collection.find(BSONDocument("campaignID" -> campaignID)).cursor[BSONDocument]().collect[List]()
val updatedResults = Await.result(modifier, timeout)
val mod = BSONDocument(
"$set" -> updatedResults(0),
"$unset" -> BSONDocument(
"action" -> **<???>**))
val futureUpdate = collection.update(selector, updatedResults(0))
futureUpdate
}
Я думаю, что меня смутило между селектором и модификатором. Я думаю, что мой селектор должен быть «действием» -> «[ « kick », « punch » ]« ', который является синтаксически неправильным, но я не уверен, как пройти в списке. Также в примере, почему имя было установлено снова, так как оно уже было установлено на «Джек» – summerNight