ReactiveMongo を使用する MongoDB 用の DAO アクターを作成しています。非常に単純な CRUD 操作をいくつか実装したいと考えています。その中には、一度に多くのレコードをアップサートする機能があります。私はリアクティブなアプリケーション (Akka 上に構築) を持っているので、冪等のアクションを持つことが重要なので、操作は挿入ではなくアップサートにする必要があります。
これまでのところ、次の(醜い)コードがあります。
case class UpsertResult[T](nUpd: Int, nIns: Int, failed: List[T])
def upsertMany[T](l: List[T], collection: BSONCollection)
(implicit ec: ExecutionContext, w: BSONDocumentWriter[T]):
Future[UpsertResult[T]] = {
Future.sequence(l.map(o => collection.save(o).map(r => (o, r))))
.transform({
results =>
val failed: List[T] = results.filter(!_._2.ok).unzip._1
val nUpd = results.count(_._2.updatedExisting)
UpsertResult(nUpd, results.size - nUpd - failed.size, failed)
}, t => t)
}
reactmongo API だけを使用して、一度に多くのレコードをアップサートするすぐに使える方法はありますか?
私は MongoDB の初心者なので、これは多くの人にとって些細なことに聞こえるかもしれません。どんな助けでも大歓迎です!