Монго изменить поток в Скала - PullRequest
0 голосов
/ 29 июня 2018

Чтение документации mongo-scala-driver_2.12, точнее, документации по MongoCollection Я подумал, что смогу подключиться к потоку изменений монго, выполнив следующее

val collection: MongoCollection[Document] = database.getCollection("MyCollection")
    collection.watch().subscribe(
      (doc: Document) => println(doc.toJson),
      (t: Throwable) => // handle failure,
      () => // handle this case too 
)

Однако я получаю ошибку компиляции о том, что watch() не является членом коллекции.

В документации метод описан как

def watch[C]()(implicit e: DefaultsTo[C, TResult], ct: ClassTag[C]): ChangeStreamObservable[C]

Это проблема с документацией? У меня были похожие проблемы во время быстрого тура 1014 * с

collection.find().first().printHeadResult()

Эта строка не будет компилироваться, говоря, что printHeadResult не был членом.

Как побочный узел, я могу подключиться к потоку изменений mongodb в python, но мы хотим воспользоваться возможностями многопоточности scala.

Я использую версию scala 2.12.6 и версию 2.1.0 mongo-scala-driver_2.12.

Минимальный пример, приводящий к этой ошибке компиляции:

import org.mongodb.scala._

/**
 * @author ${user.name}
 */
object App {

  def main(args : Array[String]) {
    val mongoClient: MongoClient = MongoClient("connection-string")

    val database: MongoDatabase = mongoClient.getDatabase("db")

    val collection: MongoCollection[Document] = database.getCollection("MyCollection")
    collection.watch().subscribe(
      (doc: Document) => println(doc.toJson),
      (t: Throwable) => // handle failure,
      () => println("done"))
  }
}

Вся трассировка стека составляет

[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.company:scala >----------------------
[INFO] Building scala 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ scala_tutorial ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory scala/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ scala ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- scala-maven-plugin:3.3.2:compile (default) @ scala ---
[INFO] scala/src/main/scala:-1: info: compiling
[INFO] Compiling 1 source files to scala/target/classes at 1530296517564
[ERROR] scala/src/main/scala/com/company/App.scala:21: error: value watch is not a member of org.mongodb.scala.MongoCollection[org.mongodb.scala.Document]
[ERROR]     collection.watch().subscribe(
[ERROR]                ^
[ERROR] one error found
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.125 s
[INFO] Finished at: 2018-06-29T11:21:59-07:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.3.2:compile (default) on project scala_tutorial: wrap: org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1) -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

1 Ответ

0 голосов
/ 29 июня 2018

Вы предоставили ссылку на 2.2 версию MongoCollection, которая имеет метод watch, но вы используете версию 2.1 , которая не имеет watch метод. Используйте версию 2.2 (или более позднюю; текущая версия 2.4) драйвера Mongo Scala.

Что касается ошибки, которую вы видите, когда следите за Quick Tour в документации, метод printHeadResult неявно предоставляется в классе Helpers.scala. Конец страницы Quick Tour Primer описывает этот класс помощников. Вам необходимо импортировать эти последствия, если вы хотите их использовать.

...