0

使用ReactiveMongo ,使用查询查找单个文档、删除该文档并最终返回它的规范方法是什么。我还在为 Playframework 使用ReactiveMongo 插件。到目前为止,我想出了以下代码段:

def removeOne(query: JsObject)(implicit collection: JSONCollection): Future[Option[MyModel]] = {
  collection.remove(query, firstMatchOnly = true).map(result => result match {
    case success if result.ok => ???
    case failure => throw new RuntimeException(failure.message)
  })
}

关键问题是a)是否LastError包含单个文档和b)如何将其转换为OptionMyModel

4

1 回答 1

1

在 reactivemongo 中没有“查找和删除”的快捷方式,就像 crud 操作等一样,但我认为你可以使用db.commands方法和 FindAndModify 来做到这一点,如下所示:

 val db: DefaultDB = ???
 import reactivemongo.core.commands._
 db.command(
   FindAndModify("collection",
     query = BSONDocument("something" -> "somevalue"),
     modify = Remove
   )
 ).map(maybeDoc =>
   maybeDoc.map(BSON.readDocument[SomeType])
 )

BSON.readDocument隐含地采用可以从 BSON 中解析 SomeType 的阅读器。操作的结果,然后映射将是Future[Option[SomeType]]

于 2014-09-14T17:10:19.770 回答