org.mongodb.scala: получить значение из возвращенного документа - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть следующий скрипт в scala для получения документа, соответствующего определенным критериям.Я также использую файл Helpers.scala для печати результатов в консоли.

val mongoClient: MongoClient = MongoClient("mongodb://192.168.99.100:27017")
val db: MongoDatabase = mongoClient.getDatabase("quotedb")
val collection: MongoCollection[Document] = db.getCollection("quotes")
val value = collection.find().projection(Projections.fields(Projections.include("_id"))).first().printResults()

printResults () возвращает результаты в формате документа, подобном следующему:

{"_id": "MSFT"}

Можно ли печатать только "MSFT" без кавычек, "_id" или скобок?Возможное решение, которое я нашел здесь , требует, чтобы я использовал драйвер com.mongodb вместо org.mongodb.scala, который я сейчас использую (и который я хотел бы сохранить).

Спасибоочень сильно

1 Ответ

0 голосов
/ 01 октября 2018

Помощник printResults предназначен только для демонстрационных целей и не должен использоваться в приложениях, поскольку ничего не возвращает.Это может быть полезно для отладки.

Метод first() возвращает SingleObservable[Document] и для получения _id из документа вы можете просто вызвать получатель с карты, например: document("_id").Документы в драйвере Scala безопасны от типов, и все значения будут BsonValue.Если _id всегда равно String, вы можете распаковать String из BsonValue следующим образом: document.getString("_id").

Помощник printResults просто вызывает println(_) для каждого результата вObservable, чтобы просто напечатать значения _id, вам необходимо преобразовать Observable[Document] в Observable[String] с помощью функции map:

  collection
    .find()
    .projection(Projections.fields(Projections.include("_id")))
    .first()
    .map(d => d.getString("_id"))
    .printResults()
...