Моя модель состоит из коллекции (автомобильных) моделей с вложенной коллекцией доступных типов топлива («дизель», «бензин», «гибридный»). Каждое топливо имеет еще одну вложенную коллекцию дверей. < /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
Spring Data MongoDB - Возвращение только одного элемента из вложенного массива с использованием @Query или Mongotemplate ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как обновить поле MongoDB, используя другое поле, используя Mongotemplate в Spring-Boot
Anonymous » » в форуме JAVA - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как обновить поле MongoDB, используя другое поле, используя Mongotemplate в Spring-Boot
Anonymous » » в форуме JAVA - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как обновить поле MongoDB, используя другое поле, используя Mongotemplate в Spring-Boot
Anonymous » » в форуме JAVA - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-