sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb scala drivrutin - det går inte att hämta ett dokument

Okej, jag skyller på mig själv (och förarens mystiska dokumentation)

Den här drivrutinen är asynkron, så vi måste bara vänta tills den är klar...Så för att sammanfatta att använda det (hittade här ) som verkligen används i dokumentationen utan att vara i själva drivrutinen

implicit class DocumentObservable[C](val observable: Observable[Document]) extends ImplicitObservable[Document] {
   override val converter: (Document) => String = (doc) => doc.toJson
}

implicit class GenericObservable[C](val observable: Observable[C]) extends ImplicitObservable[C] {
   override val converter: (C) => String = (doc) => doc.toString
}

trait ImplicitObservable[C] {
  val observable: Observable[C]
  val converter: (C) => String

  def results(): Seq[C] = Await.result(observable.toFuture(), Duration(10, TimeUnit.SECONDS))
  def headResult() = Await.result(observable.head(), Duration(10, TimeUnit.SECONDS))
  def printResults(initial: String = ""): Unit = {
    if (initial.length > 0) print(initial)
    results().foreach(res => println(converter(res)))
  }
  def printHeadResult(initial: String = ""): Unit = println(s"${initial}${converter(headResult())}")
}

Och att ändra hämta på det sättet:

def retrieveDocument(id: Int, collectionName: String, databaseName: String, url: String): Option[Document] = {
var res: Option[Document] = None
getMongoCollectionImmutable(collectionName, databaseName, url)
  .find(Filters.equal("_id", id))
  .limit(1).results().foreach({ x => res = Some(x) })
res

}

Det löser mitt problem.




  1. Hur sorterar man underdokument i matrisfältet?

  2. Tillvägagångssätt för att lagra geospatial data i Redis

  3. MongoDB grupperar efter array inre-element

  4. Hur man etablerar peering mellan MongoDB Atlas och Google App Engine Standard Environment Node App