【问题标题】:How to get parent object based upon key from child map in MongoRepository JAVA SpringBoot如何根据 MongoRepository JAVA SpringBoot 中子映射的键获取父对象
【发布时间】:2020-05-06 12:12:30
【问题描述】:

这就是我的对象的外观。

@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" 进行搜索时,我想获取整个对象。我正在使用 MongoRepositorySpringBoot

我尝试了以下方法,但它不适合我

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}})

此方法返回预期结果

【问题讨论】:

  • 你看到这个answer了吗?是你想要达到的吗?
  • 是的,它是相关的,但它正在获取 someMap 中的元素列表作为地图。我想要的是基于该对象内某个地图内的键的完整父对象

标签: java mongodb spring-boot mongodb-query


【解决方案1】:
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);
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    相关资源
    最近更新 更多