使用ReactiveMongo规范实现findAndDelete

时间:2014-09-12 09:15:45

标签: scala playframework reactivemongo play-reactivemongo

使用ReactiveMongo,使用查询查找单个文档的规范方法是什么,删除此文档,最后返回它。我也在使用ReactiveMongo plugin作为Playframework。到目前为止,我已经提出了以下代码段:

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)如何将其转换为Option MyModel类。{/ p>

1 个答案:

答案 0 :(得分: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]]