Spring Data MongoDB - Возвращение только одного элемента из вложенного массива с использованием @Query или MongotemplateJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring Data MongoDB - Возвращение только одного элемента из вложенного массива с использованием @Query или Mongotemplate

Сообщение Anonymous »

Моя модель состоит из коллекции (автомобильных) моделей с вложенной коллекцией доступных типов топлива («дизель», «бензин», «гибридный»). Каждое топливо имеет еще одну вложенную коллекцию дверей. < /P>

Например: < /p>

{ _id : 'Ford Focus' , fuels : [ {_id : "Diesel" : "doors" : [2 , 3]} , {_id: "Gasoline" , doors : [2, 3, 4, 5] } ] }
< /code>

Если я хочу получить двери, доступные для определенной модели и типа топлива, я могу выполнить: < /p>

db.models.find( {"_id" : "Ford Focus" , "fuels._id" : "Diesel"} , { 'fuels' : {$elemMatch: {_id: "Diesel"} } })
< /code>

Как я могу перевести его на метод @Query в репозитории данных пружины? < /p>

@Query(value="{ 'id' : ?0 , 'fuel' : ?1 }")
public Model findDoors(Integer model, String fuel);
< /code>

Приведенная выше реализация возвращает документ с вложенным массивом, включая все типы топлива, а не только тот, который прошел как параметр. Куда я могу поместить проекцию $ elemmatch в хранилище данных пружины? , Mongotemplate и класс BasicQuery, следуя этому посту < /p>

public Model findDoors(Integer model, String fuel){
Criteria findModelCriteria = Criteria.where("id").is(model);
Criteria findFuelCriteria = Criteria.where("fuels").elemMatch(Criteria.where("id").is(fuel));
BasicQuery basicQuery = new BasicQuery(findModelCriteria.getCriteriaObject(), findFuelCriteria.getCriteriaObject());

return mongoTemplate.findOne(basicQuery, Model.class);
}
< /code>

В этом случае я получаю исключение, когда вызывается конструктор PropertyPath < /code>, так как он пытается получить доступ к полю $ elemmatch в model.class (???) < /p>

Caused by: java.lang.IllegalAccessError
at org.springframework.data.mapping.PropertyReferenceException.detectPotentialMatches(PropertyReferenceException.java:134)
at org.springframework.data.mapping.PropertyReferenceException.(PropertyReferenceException.java:59)
at org.springframework.data.mapping.PropertyPath.(PropertyPath.java:75)


Подробнее здесь: https://stackoverflow.com/questions/332 ... using-quer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»