使用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>
答案 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]]