当前位置: 首页 > 知识库问答 >
问题:

MongoDB与Scala语言

杜凯
2023-03-14

我不熟悉MongoDB和Scala语言

我正在使用scala语言在本地连接mongodb

我正在使用下面的依赖项

// https://mvnrepository.com/artifact/org.mongodb.scala/mongo-scala-driver

libraryDependencies=“org.mongodb.scala”%%“mongo scala驱动程序”%%“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()printHeaderResult()方法,但都不起作用

请帮忙,谢谢

共有2个答案

林曦之
2023-03-14

我找到了这个链接

它适用于printResult()和PrintHeaderResult()方法

使用mongo Scala驱动程序从Scala中的Mongodb打印查询结果

唐彦
2023-03-14

Mongo Scala驱动程序以非阻塞方式工作,返回需要被Subsribed才能使用已发布数据的可观测数据

当你订阅可观察的时,

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")
  })
}

你的代码并不等待可观察的真正发布任何内容,而是在订阅后立即完成。因此你什么也得不到。

你可以添加一个类似的线程。sleep(5000)在最后阻塞并给obeservable一些时间(希望完成并)发布数据。

或者,您可以添加val结果Seq=observable.collect来阻止和收集单个序列中的所有发布数据。

 类似资料:
  • 本文向大家介绍Scala与Python | 哪种编程语言更好,包括了Scala与Python | 哪种编程语言更好的使用技巧和注意事项,需要的朋友参考一下 Scala是Martin Odersky在2004年开发的通用编程语言。 Scala和Python都是通用编程,在支持面向对象编程的数据科学中使用。 由van Rossum于1991年开发的Python是解释型高级通用编程语言。 由Martin

  • 我想创建一个独立的scala代码,使用自定义设置在MongoDB网站上使用该代码从MongoDB读取。 当我运行SBT包时,我会遇到一些错误。我猜这与SparkSession的错误创作方法有关。你能给我一个提示来修理它吗? 我的内容 Firstapp.scala代码 以及运行后的错误 编辑1: 我尝试了这个解决方案,但没有正确编译。内容同上。我改变了转换为: 汇编结果如下: 编辑2: 我添加了to

  • Scala 循环 Scala 语言中默认是没有 break 语句,但是你在 Scala 2.8 版本后可以使用另外一种方式来实现 break 语句。当在循环中使用 break 语句,在执行到该语句时,就会中断循环并执行循环体之后的代码块。 语法 Scala 中 break 的语法有点不大一样,格式如下: // 导入以下包 import scala.util.control._ // 创建 Br

  • 主要内容:if 语句,实例,if...else 语句,实例,if...else if...else 语句,实例,if...else 嵌套语句,实例Scala IF...ELSE 语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: if 语句 if 语句有布尔表达式及之后的语句块组成。 语法 if 语句的语法格式如下: 如果布尔表达式为 true 则执行大括号内的语句块,否则跳过大括号内的语句块,执行大括号之后的语句块。 实

  • 主要内容:第一个 Scala 程序,脚本形式,HelloWorld.scala 文件代码:,基本语法,标识符,Scala 关键字,Scala 注释,空行和空格,换行符,Scala 包如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法。 Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的。 我们可以认为 Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递。接下来我们来理解下,类,对象,方法,实例变