Запрос MongoShell в MongoRepository - PullRequest
1 голос
/ 21 января 2020
db.getCollection('parentCollection').find({"mapObject.someField" : {$exists: true}})

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

@Query("{mapObject.someField :{$exists : true}}")
List<Parent> findByMapKey(String id);

Здесь я получаю исключение нулевого указателя при запуске приложения

@Query("{mapObject.someField :{$exists : true}}")
here someField needs to be dynamic not fixed so i want my id to be passed in place of someField

Аналогичный вопрос существует и здесь Как получить родительский объект на основе ключа из дочерней карты в MongoRepository JAVA SpringBoot

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Как указано выше @ Valijon , это невозможно с аннотацией @ Query . Тем не менее, если кто-то находит способ, пожалуйста, поделитесь. Вот как я это сделал, используя MongoTemplate

package com.somepackage.services;

import org.springframework.stereotype.Service;
import java.util.List;
import com.yourpackagestructure.Parent;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

@Service
public class Service{

   private MongoTemplate mongoTemplate;

   public Service(MongoTemplate mongoTemplate){
    this.mongoTemplate = mongoTemplate;
   }

   public List<Parent> getParentList(String mapKey){
    Query query = new Query();
    query.addCriteria(Criteria.where("someMap." + mapKey).exists(true));
    List<Parent> parents = mongoTemplate.find(query,Parent.class);
   }
}
0 голосов
/ 21 января 2020

Это невозможно сделать с MongoRepository . Вместо этого используйте MongoTemplate .

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