MongoDB ScalaDriver Запрос для вложенного массива - PullRequest
0 голосов
/ 03 октября 2019

Меня беспокоили вложенные массивы в mongodb, и как только я нашел такой же вопрос здесь, в stackoverflow, я попробовал его и работал над mongo shell. Но теперь моя проблема заключается в том, как преобразовать указанный код в версию Scala, используя mongo scala driver. Я был бы рад и рад любым идеям и ответам.

Вот данные испытаний. Я все еще буду использовать те же данные, что и в предыдущем посте.

db.multiArr.insert({"ID" : "fruit1","Keys" : [["apple", "carrot", "banana"]]})
db.multiArr.insert({"ID" : "fruit2","Keys" : [["apple", "orange", "banana"]]})


db.multiArr.find({'Keys':{$elemMatch:{$elemMatch:{$in:['carrot']}}}})
{ "_id" : ObjectId("506555212aeb79b5f7374cbf"), "ID" : "fruit1", "Keys" : [ [ "apple", "carrot", "banana" ] ] }

db.multiArr.find({'Keys':{$elemMatch:{$elemMatch:{$in:['banana']}}}})

{ "_id" : ObjectId("506555212aeb79b5f7374cbf"), "ID" : "fruit1", "Keys" : [ [ "apple", "carrot", "banana" ] ] }
{ "_id" : ObjectId("5065587e2aeb79b5f7374cc0"), "ID" : "fruit2", "Keys" : [ [ "apple", "orange", "banana" ] ] }

Я знаю, что это будет избыточный пост. Но так как на вопрос был дан ответ в 2012 году, я не вижу никакой надежды получить какой-либо ответ на мой вопрос, если я опубликую его там.

Это ссылка на предыдущий вопрос: Запрос массива массивовв MongoDB

Заранее спасибо.

1 Ответ

1 голос
/ 03 октября 2019

Если вы используете mongo-scala-driver, тогда

import scala.collection.JavaConverters._
import org.mongodb.scala._

// if you have a connections string
val mongoClientSettings = MongoClientSettings.builder()
  .applyConnectionString("mongodb://localhost:27017")
  .build()

// if you have a cluster and ip's of the nodes
val servers = List("xx.xx.xx.xx", "xx.xx.xx.xx")
val serverAddresses = mongoConfig.servers.map(s => new ServerAddress(s)).asJava
val mongoClientSettings = MongoClientSettings.builder()
  .applyToClusterSettings(b => b.hosts(serverAddresses))
  .build()

val mongoClient = MongoClient(mongoClientSettings)

val mongoDatabase = mongoClient.getDatabase("your-database-name")

val mongoCollection = mongoDatabase.getCollection("multiArr")

val documentsFuture: Future[List[Document]] = mongoCollection.find(Document(
  "Keys" -> Document(
    "$elemMatch" -> Document(
      "$elemMatch" -> Document("$in" -> List("carrot"))
    )
  )
).toFuture

И теперь у вас есть будущее, содержащее список ваших документов, я надеюсь, что вы можете сделать все остальное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...