MongoDB 使用 Scala 语言
MongoDB with Scala language
我是 MongoDB 和 Scala 语言的新手
我正在使用 scala 语言在本地连接 mongodb
我正在使用以下依赖项
//
https://mvnrepository.com/artifact/org.mongodb.scala/mongo-scala-driver
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" %
"4.2.3"
我试过的
object Demo extends App {
val mongoClient: MongoClient = MongoClient("mongodb://127.0.0.1:27017/")
val database: MongoDatabase = mongoClient.getDatabase("DemoDB")
println(database)
val collection: MongoCollection[Document] =database.getCollection("demodata");
val observable = collection.find();
}
以上代码返回以下格式的数据
FindObservable(com.mongodb.reactivestreams.client.internal.FindPublisherImpl@6253c26)
我也试过
observable.subscribe ( new Observer[Document] {
override def onNext(result: Document): Unit = println(result.toJson())
override def onError(e: Throwable): Unit = println("Failed" + e.getMessage)
override def onComplete(): Unit = println("Completed")
})
我也尝试了 printResult()
和 printHeadResult()
方法,但是 none 的方法有效
请帮忙
提前致谢
Mongo Scala 驱动程序通过返回 Observables
以非阻塞方式工作,需要 Subsribed
才能使用发布的数据。
当您像下面这样订阅 observable
时,
object Demo extends App {
val mongoClient: MongoClient = MongoClient("mongodb://127.0.0.1:27017/")
val database: MongoDatabase = mongoClient.getDatabase("DemoDB")
println(database)
val collection: MongoCollection[Document] = database.getCollection("demodata")
val observable = collection.find()
observable.subscribe ( new Observer[Document] {
override def onNext(result: Document): Unit = println(result.toJson())
override def onError(e: Throwable): Unit = println("Failed" + e.getMessage)
override def onComplete(): Unit = println("Completed")
})
}
您的代码不会等待 observable
实际发布任何内容,它会在订阅后立即完成。因此你什么也得不到。
您可以在末尾添加类似 Thread.sleep(5000)
的东西来阻止并给 obeservable
一些时间来(希望完成并)发布数据。
或者,您可以添加 val resultSeq = observable.collect
以阻止并收集单个序列中的所有已发布数据。
我找到了这个link
它适用于 printResult() 和 printHeadResult() 方法
我是 MongoDB 和 Scala 语言的新手
我正在使用 scala 语言在本地连接 mongodb
我正在使用以下依赖项
// https://mvnrepository.com/artifact/org.mongodb.scala/mongo-scala-driver
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "4.2.3"
我试过的
object Demo extends App {
val mongoClient: MongoClient = MongoClient("mongodb://127.0.0.1:27017/")
val database: MongoDatabase = mongoClient.getDatabase("DemoDB")
println(database)
val collection: MongoCollection[Document] =database.getCollection("demodata");
val observable = collection.find();
}
以上代码返回以下格式的数据
FindObservable(com.mongodb.reactivestreams.client.internal.FindPublisherImpl@6253c26)
我也试过
observable.subscribe ( new Observer[Document] {
override def onNext(result: Document): Unit = println(result.toJson())
override def onError(e: Throwable): Unit = println("Failed" + e.getMessage)
override def onComplete(): Unit = println("Completed")
})
我也尝试了 printResult()
和 printHeadResult()
方法,但是 none 的方法有效
请帮忙 提前致谢
Mongo Scala 驱动程序通过返回 Observables
以非阻塞方式工作,需要 Subsribed
才能使用发布的数据。
当您像下面这样订阅 observable
时,
object Demo extends App {
val mongoClient: MongoClient = MongoClient("mongodb://127.0.0.1:27017/")
val database: MongoDatabase = mongoClient.getDatabase("DemoDB")
println(database)
val collection: MongoCollection[Document] = database.getCollection("demodata")
val observable = collection.find()
observable.subscribe ( new Observer[Document] {
override def onNext(result: Document): Unit = println(result.toJson())
override def onError(e: Throwable): Unit = println("Failed" + e.getMessage)
override def onComplete(): Unit = println("Completed")
})
}
您的代码不会等待 observable
实际发布任何内容,它会在订阅后立即完成。因此你什么也得不到。
您可以在末尾添加类似 Thread.sleep(5000)
的东西来阻止并给 obeservable
一些时间来(希望完成并)发布数据。
或者,您可以添加 val resultSeq = observable.collect
以阻止并收集单个序列中的所有已发布数据。
我找到了这个link
它适用于 printResult() 和 printHeadResult() 方法