2014-09-12 1 views
0

Использование ReactiveMongo, что бы канонический способ найти один документ с помощью запроса, удалить этот документ и, наконец возвращение его. Я также использую ReactiveMongo plugin для Playframework. До сих пор я придумал следующий фрагмент кода:Canonical реализация findAndDelete с использованием 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) 
    }) 
} 

Ключевой вопрос а) содержит ли LastError единый документ и б) как он может быть преобразован в Option из MyModel класса.

+0

ReactiveMongo предоставляет '.findAndRemove' и' .findAndUpdate' как операции сбора, начиная с 0.11 – cchantep

ответ

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 неявно принимает читателя, который может анализировать SomeType из BSON. Результатом операции, а затем карты будет Future[Option[SomeType]]

 Смежные вопросы

  • Нет связанных вопросов^_^