【问题标题】:SpringData MongoDb Repository FindObject List Field by ListSpring Data MongoDb Repository 按列表查找对象列表字段
【发布时间】:2020-07-20 23:32:20
【问题描述】:

我正在尝试根据其列出的值查找特定实体。但是以下查询不起作用,有人知道我做错了什么吗?下面的例子?

注意:使用的数据库是mongodb 数据库和模型如下例所示:

Entity1{
  name: x
  options:[
    {
     id: 1
     key: value1,
     someOtherKey: someOtherValues
     },
    {
     id: 2
     key: value2,
     someOtherKey: someOtherValues2
     }
  ]
}

Entity2{
  name: x
  options:[
    {
     id: 4
     key: value4,
     someOtherKey: someOtherValues4
     },
    {
     id: 5
     key: value5,
     someOtherKey: someOtherValues5
     }
  ]
}

型号

public class Entity {
  
  private String name;

  @DBRef
  private List<Option> options;

}

我要获取Entity2,我的参数是,list:

options:[
 {
   id: 4
   key: value4,
   someOtherKey: someOtherValues4
 },
 {
   id: 5
   key: value5,
   someOtherKey: someOtherValues5
 }
]

我的仓库:

List<Entity> findByValues(List<Option> options);

【问题讨论】:

    标签: spring-boot spring-data spring-data-mongodb


    【解决方案1】:

    也许您正在寻找ElementCollection。你可以这样使用它:

    @Entity
    public class Entity {
      
      private String name;
    
      @ElementCollection
      private List<Values> values;
    
    }
    

    如果您想了解更多信息,还有一个example

    【讨论】:

    • 我正在使用 MongoDb
    【解决方案2】:

    如果您有一个 list&lt;Value&gt;,它是 Json 数组 values 中所有值的列表,例如来自名为 values 的 Json 数组中的所有值

    values:[
        {key1: value1}
        {key3: value2}
      ]
    

    您可以获得包含所有值的列表,例如value1, value2, ...,假设它是List&lt;Value&gt;,然后在您的存储库中,您可以使用类似

    1) 使用 Spring 数据规范

    List<Value> findByValuesIn(List<Value> values);
    

    2) 使用原生查询

    @Query("SELECT e FROM Entity e WHERE e.values IN (:values)")
    List<Employee> findByValues(@Param("values") List<Value> values);
    

    【讨论】:

    • 使用的数据库是MongoDb。 valuesSection 也是对象列表/集合的示例。我更新了示例以更符合我的情况。我希望它更清楚。
    • 试试List&lt;Entity&gt; findByValuesIn(List&lt;Option&gt; options);而不是List&lt;Entity&gt; findByValues(List&lt;Option&gt; options);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2018-05-22
    • 2021-08-26
    • 2020-01-14
    • 2016-12-19
    相关资源
    最近更新 更多