[英]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.