Как извлечь данные из результата запроса к mongodb в scala?

Пользователь

от elian.swift , в категории: Другие , 2 года назад

Как извлечь данные из результата запроса к mongodb в scala?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jerad.kuphal , 2 года назад

@elian.swift 

Чтобы извлечь данные из результата запроса к mongodb в Scala, можно использовать следующий код:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import org.mongodb.scala._
import org.mongodb.scala.model.Filters._

val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("myDatabase")
val collection: MongoCollection[Document] = database.getCollection("myCollection")

val cursor: MongoCursor[Document] = collection.find(equal("field", "value")).iterator()

while (cursor.hasNext()) {
  val document: Document = cursor.next()
  val field1: String = document.getString("field1")
  val field2: Int = document.getInteger("field2")
  // ... and so on for other fields
}


В этом примере мы создали объект MongoClient, подключились к базе данных myDatabase, выбрали коллекцию myCollection и выполнели запрос к ней с условием field = "value". Результат запроса сохраняем в объекте cursor, который мы обходим благодаря методу hasNext() и получаем значения полей документа через методы getString(), getInteger() и т.д.

Пользователь

от yasmine , 2 года назад

@elian.swift 

Для извлечения данных из результата запроса к mongodb в scala можно использовать различные методы. Рассмотрим несколько примеров:

  1. Использование методов коллекции:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import org.mongodb.scala._
import org.mongodb.scala.bson.collection.Document
import org.mongodb.scala.model.Filters._

val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("test")
val collection: MongoCollection[Document] = database.getCollection("example")

val observable: Observable[Document] = collection.find(equal("name", "John"))
observable.subscribe(new Observer[Document] {
  override def onNext(result: Document): Unit = {
    val name = result.getString("name")
    val age = result.getInteger("age")
    println(s"$name is $age years old")
  }
  override def onError(e: Throwable): Unit = println("error: " + e.getMessage)
  override def onComplete(): Unit = println("complete")
})


В этом примере мы создали подключение к mongodb, получили коллекцию и выполнели запрос на выборку документов, удовлетворяющих условию name = 'John'. Затем мы подписались на результаты итерации по документам с помощью метода subscribe и обработали каждый документ внутри метода onNext.

  1. Использование библиотеки Casbah:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import com.mongodb.casbah.Imports._

val mongoClient: MongoClient = MongoClient()
val database: MongoDB = mongoClient("test")
val collection: MongoCollection = database("example")

val query: BasicDBObject = MongoDBObject("name" -> "John")
val cursor: MongoCursor = collection.find(query)

for (doc <- cursor) {
  val name = doc.getAs[String]("name").get
  val age = doc.getAs[Int]("age").get
  println(s"$name is $age years old")
}


В этом примере мы также получили коллекцию и выполнели запрос на выборку документов, удовлетворяющих условию name = 'John', но с помощью библиотеки Casbah. Затем мы получили курсор и обрабатывали каждый документ внутри цикла.

  1. Использование библиотеки ReactiveMongo:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import reactivemongo.api._
import reactivemongo.api.bson._
import reactivemongo.api.bson.collection._

val mongoUri: String = "mongodb://localhost:27017/test"
val driver: AsyncDriver = AsyncDriver()
val parsedUri: MongoConnection.ParsedURI = MongoConnection.parseURI(mongoUri).get
val connection: Future[MongoConnection] = driver.connect(parsedUri)
val database: Future[DefaultDB] = connection.map(_.database(parsedUri.db.get))
val collection: Future[BSONCollection] = database.map(_.collection("example"))

val query: BSONDocument = BSONDocument("name" -> "John")
val observable: Future[Unit] = collection.flatMap(_.find(query).cursor[BSONDocument]().collect(-1, Cursor.FailOnError())
  .foreach { doc =>
    val name = doc.getAs[String]("name").get
    val age = doc.getAs[Int]("age").get
    println(s"$name is $age years old")
  })


В этом примере мы создали подключение к mongodb с помощью библиотеки ReactiveMongo, получили коллекцию и выполнели запрос на выборку документов, удовлетворяющих условию name = 'John'. Затем мы получили курсор и обработали каждый документ внутри метода foreach.


Это лишь несколько примеров из множества возможных решений. Выбор метода зависит от предпочтений и требований к производительности и удобству кода.