Как получить родительский объект на основе ключа от дочерней карты в MongoRepository JAVA SpringBoot - PullRequest
0 голосов
/ 20 января 2020

Вот так выглядит мой объект.

@Document("parent")
public class Parent {
    @Id 
    private String id;
    private String field-1;
    private Map<String,Long> someMap;
}


{
    "_id" : "parent-id",
    "field-1" : "some value",
    "someMap" : {
        "category-5" : 123,
        "category-4" : 456
    }
}

Я хочу получить весь этот объект при поиске с помощью "category-5" или "category-4" . Я использую MongoRepository и SpringBoot .

Я попробовал следующий подход, но он не работает для меня

public interface ParentRepo extends MongoRepository<Parent, String> {

    @Query("{someMap :{$in: [?0]}}")
    List<Parent> findBySomeMap(String id);
}

или если кто-то может помочь мне преобразовать это в MongoRepository / @ Query метод, который был бы великолепен и высоко ценится. Цель состоит в том, чтобы передать CategoryId в качестве параметра для запроса

db.getCollection('parentCollection').find({"someMap.category-4" : {$exists:true}})

Этот метод возвращает ожидаемые результаты

1 Ответ

0 голосов
/ 29 января 2020
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);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...