Mongodb 大容量插入/插入多个播放框架,ReactiveMongo
我正在使用PlayFramework2.5.0和ReactiveMongo构建一个应用程序,我花了很多时间在大多数web语言中都很容易做到的事情上 那个东西一次插入了许多文档。 为此,我必须使用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,尝试从一系
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
}
}
}