使用 mongo-scala-driver 在 Scala 中打印来自 Mongodb 的查询结果

问题描述 投票:0回答:4

我正在尝试在 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
版本
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, 服务器描述=[服务器描述{地址=本地主机:27017, 类型=未知,状态=连接}]}。等待30000毫秒再计时 出

有没有办法在控制台查看检索结果?

mongodb scala mongodb-.net-driver mongodb-scala
4个回答
9
投票

您必须包含

Helpers.scala
文件才能使用
printResults()
功能。它位于他们的 github 存储库Helpers.scala.

这些辅助函数在打印值之前等待 observable 完成。


2
投票

对我有用的方法是在代码末尾添加一个

Thread.sleep
,这样异步调用后程序结束就有机会打印元素。

发生这种情况是因为 Mongo 的 Observables 的反应性质,这意味着您必须使用 Futures 来完成大部分操作。

只是

Thread.sleep
应该工作。


0
投票

MongoDB 驱动程序是异步的,要使其同步,您可以应用一些 monads 运算符

  1. andThen:允许链接 Observables。 collect :将所有结果收集到一个序列中。
  2. flatMap :通过对 Observable 的每个结果应用一个函数来创建一个新的 Observable。
  3. foldLeft :创建一个新的 Observable,其中包含应用累加器函数的单个结果。 foreach :应用应用于每个发出结果的函数。
  4. head:返回未来 Observable 的头部。
  5. map :通过对 Observable 的每个发射结果应用一个函数来创建一个新的 Observable。

observables的完整列表:

例如:

val doc = Await.result(myCollection
          .find(and(regex("date", s"^${date}T.*"), equal("field", fieldValue)))
          .sort(descending("timestamp"))
          .first().head(), Duration(10, SECONDS))

0
投票

http://mongodb.github.io/mongo-java-driver/4.9/driver-scala/getting-started/quick-start-primer/

在快速浏览的Helpers中定义。当然你可以在你的项目中创建/复制它们。

© www.soinside.com 2019 - 2024. All rights reserved.