Выполнить вложенный запрос Sping Data Mongo с использованием двух или более параметров с помощью MongoRepository?

#mongodb #spring-data-mongodb

#mongodb #spring-data-mongodb

Вопрос:

Как выполнить вложенный запрос в MongoDB для еще двух полей? У меня есть документ JSON, подобный приведенному ниже, и я хочу выполнить запрос, используя как sample2Cd, так и sample3Cd. Как мы можем это сделать?

Я мог написать так, но это не работает!!

 Currency findByCountries_Sample2CdAndsample3CdAndNumberCode
  

Вот мой документ

 {
    "_id" : ObjectId("5c8a65026161ce4970e85035"),
    ..........
    ..............
    "countries" : [ 
        {
            .......
            "sample2Cd" : "AB",
            "sample3Cd" : "ABC",
            "numberCode" : "1"
            ......
        }
    ]
}
  

Комментарии:

1. Не уверен, что вы можете добиться этого с помощью Spring Data query builder, но вы пытались findByCountries_Sample2CdAndCountries_sample3CdAndCountries_NumberCode ?

Ответ №1:

Вы можете написать spring repo метод, подобный приведенному ниже.

 List<Currency> findByCountriesSample2CdAndCountriesSample3CdAndCountriesNumberCode(String param1,String param2, String param3);
  

Если комбинация будет уникальной, то вы можете изменить возвращаемый тип на object вместо списка, как показано ниже.

 Currency findByCountriesSample2CdAndCountriesSample3CdAndCountriesNumberCode(String param1,String param2, String param3);
  

Комментарии:

1. Это не работает Invalid derived query! No property countriesSample2Cd found for type Currency!

Ответ №2:

Я смог решить эту проблему с помощью проекции @Query. Поехали!

 @Query(value = "{'countries.sample2Cd' : ?0, 'countries.sample3Cd' ?1 }")
List<Currency> findByCountriesSample2CdAndSample3Cd(String param1,String param2);
  

Примечание: Аналогично wise, вы можете использовать несколько параметров, сформировать запрос и получить результат.