首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactiveMongo FindAndModify澄清

ReactiveMongo FindAndModify澄清
EN

Stack Overflow用户
提问于 2015-10-23 16:26:33
回答 2查看 1.6K关注 0票数 2

我的MongoDB数据库中有一个集合,包括几个键。现在我想用一个新的字段来更新这个集合。到目前为止,我得到的是:

代码语言:javascript
复制
  def confirm(hash: String) = {

    val myDb = dbConn.db(dbName)
    val userCollection = myDb[BSONCollection]("user")

    val selector = BSONDocument(idKey -> BSONObjectID(hash))
    val modifier =  BSONDocument(
      "$set" -> BSONDocument("date" -> BSONString(now.toString)) // Line 1
    )

    val command = FindAndModify(
      userCollection.name,
      selector,
      Update(modifier, fetchNewObject = true)
    )

    myDb.command(command)
      .map { user => // Line 2
      Right(bidList)
    }.recover {
      case LastError(ok,err, code, errMsg, _) =>
        Left(ServiceError(errMsg.getOrElse("failure!")))
    }
  }

我对上述实施有两个问题:

在第1行:会用一个名为date的新字段更新现有的文档吗?

在第2行:映射myDb.command(命令)给了我一个OptionBSONDocument,但我感到惊讶的是,我的作用域有一个隐式转换。所以我希望它能返回一个OptionUser!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-24 14:28:49

您可以查看.findAndUpdateFindAndModifyResult,后者提供了一个.result操作来根据可用的BSON读取器获得结果。

代码语言:javascript
复制
val person: Future[Option[AType]] = collection.findAndUpdate(
  BSONDocument("name" -> "James"),
  BSONDocument("$set" -> BSONDocument("age" -> 17)),
  fetchNewObject = true).map(_.result[AType])
票数 3
EN

Stack Overflow用户

发布于 2017-02-21 09:33:40

我只是花了一些时间寻找play-reactivemongo的等价物。也许这个例子对将来的人有帮助。

代码语言:javascript
复制
val collectionFut: Future[JSONCollection] = reactiveMongoApi.database.map(_.collection[JSONCollection]("sale.numberingCounter"))

def updateIdx(nsId: NumberingSeriesId, month: Option[Int], year: Option[Int], value: Int): Future[Option[NumberingCounter]] = {
 val selector = Json.obj("numberingSeriesId" -> nsId, "month" -> month, "year" -> year)        
 val modifier = Json.obj("$set" -> Json.obj("idx" -> value))
    for {
      collection <- collectionFut
      writeResult <- collection.findAndUpdate(selector,modifier,upsert = true)
    } yield {
      writeResult.value.map(_.as[NumberingCounter])
    }
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33307215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档