Mongodb 大容量插入/插入多个播放框架,ReactiveMongo

Mongodb 大容量插入/插入多个播放框架,ReactiveMongo,mongodb,scala,playframework,reactivemongo,play-reactivemongo,Mongodb,Scala,Playframework,Reactivemongo,Play Reactivemongo,我正在使用PlayFramework2.5.0和ReactiveMongo构建一个应用程序,我花了很多时间在大多数web语言中都很容易做到的事情上 那个东西一次插入了许多文档。 为此,我必须使用ReactiveMongo函数bulkInsert 我发现有一个非常简单的例子,但它是从2013年开始的,现在签名发生了变化 从 到 因此,在这里,我尝试以该示例为例,找到一种将枚举数转换为流的方法(没有找到任何方法): 现在我发现自己潜入Akka、ReactiveMongo和Play API,尝试从一系

我正在使用PlayFramework2.5.0和ReactiveMongo构建一个应用程序,我花了很多时间在大多数web语言中都很容易做到的事情上

那个东西一次插入了许多文档。 为此,我必须使用ReactiveMongo函数
bulkInsert

我发现有一个非常简单的例子,但它是从2013年开始的,现在签名发生了变化

因此,在这里,我尝试以该示例为例,找到一种将枚举数转换为流的方法(没有找到任何方法):

现在我发现自己潜入Akka、ReactiveMongo和Play API,尝试从一系列JSObject创建JSObject流

然后我尝试了另一种方法:从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]

我宁愿不使用流,也不使用第二种解决方案,因为我不希望代码中有我不理解的东西

我刚刚发现如何处理bulkInsert。有一个例子

构建.sbt

...
libraryDependencies ++= Seq(
  "org.reactivemongo" %% "play2-reactivemongo" % "0.11.14"
)
...
package cx.repository

import cx.model.CxTransactionEntity
import play.modules.reactivemongo.ReactiveMongoApi
import reactivemongo.play.json.collection.JSONCollection

import scala.concurrent.{ExecutionContext, Future}

class CxTransactionsRepository @Inject()(val reactiveMongoApi: ReactiveMongoApi)(implicit ec: ExecutionContext){

  private val cxTransactionsCollectionFuture: Future[JSONCollection] = reactiveMongoApi.database.map(_.collection[JSONCollection]("cxTransactions"))

  def bulkInsert(seq: Seq[CxTransactionEntity]): Future[Int] = {
    for {
      transactions <- cxTransactionsCollectionFuture
      writeResult <- transactions.bulkInsert(ordered = false)(seq.map(implicitly[transactions.ImplicitlyDocumentProducer](_)): _*)
    } yield {
      writeResult.n
    }
  }

}
plugins.sbt

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.12")
CXTransactionRepository.scala

...
libraryDependencies ++= Seq(
  "org.reactivemongo" %% "play2-reactivemongo" % "0.11.14"
)
...
package cx.repository

import cx.model.CxTransactionEntity
import play.modules.reactivemongo.ReactiveMongoApi
import reactivemongo.play.json.collection.JSONCollection

import scala.concurrent.{ExecutionContext, Future}

class CxTransactionsRepository @Inject()(val reactiveMongoApi: ReactiveMongoApi)(implicit ec: ExecutionContext){

  private val cxTransactionsCollectionFuture: Future[JSONCollection] = reactiveMongoApi.database.map(_.collection[JSONCollection]("cxTransactions"))

  def bulkInsert(seq: Seq[CxTransactionEntity]): Future[Int] = {
    for {
      transactions <- cxTransactionsCollectionFuture
      writeResult <- transactions.bulkInsert(ordered = false)(seq.map(implicitly[transactions.ImplicitlyDocumentProducer](_)): _*)
    } yield {
      writeResult.n
    }
  }

}
包cx.repository
导入cx.model.CxTransactionEntity
导入play.modules.reactivemongo.ReactiveMongoApi
导入reactivemongo.play.json.collection.JSONCollection
导入scala.concurrent.{ExecutionContext,Future}
类CxTransactionsRepository@Inject()(val-reactiveMongoApi:reactiveMongoApi)(隐式ec:ExecutionContext){
private val cxTransactionCollectionFuture:Future[JSONCollection]=reactiveMongoApi.database.map(uu.collection[JSONCollection](“cxTransactions”))
def bulkInsert(seq:seq[CxTransactionEntity]):Future[Int]={
为了{

事务请查看。我仍然得到相同的错误:类型不匹配;发现:Seq[reactivemongo.play.json.collection.JSONCollection#ImplicitlyDocumentProducer]必需:Seq[x$12.ImplicitlyDocumentProducer],我真的不明白您的代码不够完整,无法理解它也存在“类型不匹配”隐式DocumentProducer的问题,我通过使用隐式Json格式化程序添加相应的对象解决了这个问题。
objectperson{
implicit val formatter=Json.format[FuelStation]
}
对于Json
隐式val formatter=Json.format[FuelStation]
或对于bson:
隐式val writer=Macros.writer[Person]
package cx.repository

import cx.model.CxTransactionEntity
import play.modules.reactivemongo.ReactiveMongoApi
import reactivemongo.play.json.collection.JSONCollection

import scala.concurrent.{ExecutionContext, Future}

class CxTransactionsRepository @Inject()(val reactiveMongoApi: ReactiveMongoApi)(implicit ec: ExecutionContext){

  private val cxTransactionsCollectionFuture: Future[JSONCollection] = reactiveMongoApi.database.map(_.collection[JSONCollection]("cxTransactions"))

  def bulkInsert(seq: Seq[CxTransactionEntity]): Future[Int] = {
    for {
      transactions <- cxTransactionsCollectionFuture
      writeResult <- transactions.bulkInsert(ordered = false)(seq.map(implicitly[transactions.ImplicitlyDocumentProducer](_)): _*)
    } yield {
      writeResult.n
    }
  }

}