Я создаю приложение с помощью Play Framework 2.5.0 и ReactiveMongo, и я трачу много времени, застрял на том, что было бы очень легко сделать на большинстве веб-языков ,Массовая вставка/Вставка многих с Play Framework, ReactiveMongo
Эта вещь вставляет много документов одновременно. Для этого я должен использовать функцию ReactiveMongo bulkInsert
.
я нашел this google group, что было очень простой пример, однако именно с 2013 года, и теперь подпись изменилась
из
def bulkInsert[T](enumerator: Enumerator[T])
в
def bulkInsert(documents: Stream[P.Document], ordered: Boolean, writeConcern: WriteConcern)(implicit ec: ExecutionContext): Future[MultiBulkWriteResult]
Так вот я попытался взять этот пример и найти способ конвертировать Enumerator в Stream (не нашел никакого способа сделать это):
val schemasDocs: Seq[JsObject] = {
jsonSchemas.fields.map {
case (field, value) => Json.obj(field -> value)
}
}
val enumerator = Enumerator.enumerate(schemasDocs)
val schemasStream = Source.fromPublisher(Streams.enumeratorToPublisher(enumerator)) // my attempt to turn enumerator into a Stream
val schemasInsert = {
getCollection("schemas").flatMap(
_.bulkInsert(schemasStream, true)
)
}
Теперь я ловлю себя дайвинг в Акко, ReactiveMongo и Play API, чтобы попытаться создать поток JsObjects из послед из JsObjects ..
Тогда я попробовал другой подход: example с сайта ReactiveMongo в
val bulkDocs = schemasDocs.map(implicitly[collection.ImplicitlyDocumentProducer](_))
collection.bulkInsert(ordered=true)(bulkDocs: _*)
дает мне ошибку, которая, как трудно отлаживать:
type mismatch; found : Seq[reactivemongo.play.json.collection.JSONCollection#ImplicitlyDocumentProducer] required: Seq[x$48.ImplicitlyDocumentProducer]
Я предпочел бы не использовать потоковые nd использовать второе решение, так как мне не нравятся вещи, которые я не понимаю в своем коде.
Пожалуйста, Лоо k на [примеры] (https://github.com/ReactiveMongo/ReactiveMongo/blob/0.11.x/driver/src/test/scala/BSONCollectionSpec.scala#L72). – cchantep
Я все еще получаю ту же ошибку: тип несоответствия; найдено: Seq [replivemongo.play.json.collection.JSONCollection # ImplicitlyDocumentProducer] требуется: Seq [x $ 12.ImplicitlyDocumentProducer], я действительно не понимаю его – Daniel
Ваш код недостаточно заполнен, чтобы его понять – cchantep