首页 > 解决方案 > SpringData MongoDb Repository FindObject List Field by List

问题描述

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

注意:使用的数据库是 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,我的参数是,列表:

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

我的存储库:

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

标签: spring-bootspring-dataspring-data-mongodb

解决方案


如果您有一个list<Value>Json Array 中所有值的列表values,例如来自您的 Json Array 称为values

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

您可以获得包含所有值value1, value2, ...的 List ,假设它是 a List<Value>,然后在您的存储库中,您可以使用类似

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

推荐阅读