Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何使用ReactiveMongo更新文档_Scala_Reactivemongo - Fatal编程技术网

Scala 如何使用ReactiveMongo更新文档

Scala 如何使用ReactiveMongo更新文档,scala,reactivemongo,Scala,Reactivemongo,当我找到for的“活动ID”时,我从MongoDB获得了以下文档列表:“DEMO-1” 现在,我想在这里做的是,对于给定的活动ID,我需要找到它的所有版本(在我的例子中是修订版),并将操作字段修改为字符串类型的死。我阅读了这些文档,它们的示例太简单,对我的情况没有太大帮助。这些文件是这样说的: val selector = BSONDocument("name" -> "Jack") val modifier = BSONDocument( "$set" -> BSONDocu

当我找到for
的“活动ID”时,我从MongoDB获得了以下文档列表:“DEMO-1”

现在,我想在这里做的是,对于给定的
活动ID
,我需要找到它的所有版本(在我的例子中是修订版),并将
操作
字段修改为字符串类型的
。我阅读了这些文档,它们的示例太简单,对我的情况没有太大帮助。这些文件是这样说的:

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结构很容易。在我的例子中,我需要首先找到文档,然后动态修改
操作
字段,因为与文档不同,我的
操作
字段可以有不同的值

以下是我到目前为止显然没有编译的代码:

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
  }
def updateDocument(活动ID:String)={
val timeout=scala.concurrent.duration.duration(5,“秒”)
val collection=db.collection[BSONCollection](collectionName)
val选择器=B音频文件(“操作”->“死亡”)
val修饰符=collection.find(BSONDocument(“campaignID”->campaignID)).cursor[BSONDocument]().collect[List]()
val updatedResults=Await.result(修饰符,超时)
val mod=b有声文件(
“$set”->updatedResults(0),
“$unset”->B未归档文件(
“行动”->****))
val futureUpdate=collection.update(选择器,updateResults(0))
未来更新
}
如果查看,可以看到可以使用
BSONArray
传递BSON值序列

BSONDocument("action" -> BSONArray("kick", "punch"))
如果将[T]列为值,并且提供了一个
BSONWriter[\uP>如果查看,您可以看到
BSONArray
可用于传递BSON值序列

BSONDocument("action" -> BSONArray("kick", "punch"))

如果您有
将[T]
列为值,并为
T
提供了一个
BSONWriter[\up>这对我自己的问题很有用。感谢@cchantep帮助我

val collection = db.collection[BSONCollection](collectionName)
val selector = BSONDocument("campaignID" -> campaignID)
val mod = BSONDocument("$set" -> BSONDocument("action" -> "dead"))
val futureUpdate = collection.update(selector, mod, multi = true)

这对我来说是对我自己问题的回答。谢谢@cchantep帮助我

val collection = db.collection[BSONCollection](collectionName)
val selector = BSONDocument("campaignID" -> campaignID)
val mod = BSONDocument("$set" -> BSONDocument("action" -> "dead"))
val futureUpdate = collection.update(selector, mod, multi = true)

我想我把选择器和修饰符搞混了。我想我的选择器应该是
“action”->“[“kick”,“punch”]”“
,这在语法上是不正确的,但我不知道如何传入列表。同样在这个例子中,既然名称已经设置为“Jack”,为什么还要重新设置名称我想我把选择器和修饰符搞混了。我想我的选择器应该是
“action”->“[“kick”,“punch”]”“
,这在语法上是不正确的,但我不知道如何传入列表。同样在这个例子中,既然名称已经设置为“Jack”,为什么还要重新设置名称我不理解否决票。我发布了一个问题并提供了一个答案,实际上解决了我想要解决的问题。这可能会帮助有类似问题的人。我不理解否决票。我发布了一个问题并提供了一个答案,实际上解决了我想要解决的问题。这可能会帮助有类似问题的人。