[英]Printing query results from Mongodb in Scala using mongo-scala-driver
我正在尝试在 Scala 中打印来自 MongoDB 查询的结果
val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("tableScala")
val collection: MongoCollection[Document] = database.getCollection("tableScala")
collection.find().printResults()
抛出的错误是: Cannot resolve symbol printResults
。 建议使用mongo-scala-driver
version 1.2
其他一些问题的答案,因为 printResults() 未在1.1
及以下版本中实现
SBT文件:
name := "scalaMongoDriver"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "1.2.0-beta1"
尝试使用以下方法手动打印:
collection.find().subscribe(
(user: Document) => println(user.toJson()), // onNext
(error: Throwable) => println(s"Query failed: ${error.getMessage}"), // onError
() => println("Done") // onComplete
)
导致以下信息:
信息:ReadPreferenceServerSelector{readPreference=primary} 没有从集群描述 ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, serverDescriptions=[ServerDescription{address=localhost:27017, type=UNKNOWN, state=CONNECTING}]} 选择服务器。 超时前等待 30000 毫秒
有没有办法在控制台中查看检索到的结果?
您必须包含Helpers.scala
文件才能使用printResults()
函数。 它位于他们的 github 存储库Helpers.scala 中。
这些辅助函数在打印值之前等待 observable 完成。
我今天遇到了同样的问题,但我在网上找到了解决方案。
对我有用的方法是在代码末尾添加一个 Thread.sleep,所以程序在异步调用后结束有机会打印元素。
发生这种情况是因为 Mongo 的 Observables 具有反应性,这意味着您必须使用 Futures 来完成大部分操作。
只有 Thread.sleep 应该可以工作。
希望有帮助!
MongoDB 驱动程序是异步的,为了使其同步,您可以应用一些 monads 操作符
可观察的完整列表:
例如:
val doc = Await.result(myCollection
.find(and(regex("date", s"^${date}T.*"), equal("field", fieldValue)))
.sort(descending("timestamp"))
.first().head(), Duration(10, SECONDS))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.