Чтение документации 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