當我找到"campaignID":"DEMO-1"
時,我從MongoDB獲得以下文檔列表。如何使用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
場String類型的dead
。我閱讀了文檔,他們的例子太簡單了,對我來說不太有幫助。這就是文檔說:
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