首页 > 解决方案 > JPA mongo,从 List 中获取许多

问题描述

我有一个字符串列表

List<String> myList = new ArrayList<>();
myList.add("1");
myList.add("2");
myList.add("3");

我想通过在循环中检查这样的字段来查找数据库条目。

@Repository
public interface MyRepository extends MongoRepository<MyObject, String> {

    public MyObject findByxfield(String xfield);


}

我怎样才能做到这一点:

如果 Myobject.somefield == myList(i),那么我会将 MyObject 存储在 List 中并将其返回给用户。

澄清:

假设 MyObject 类有这些字段:

@Entity
@Document(collection = "MyObject")
public class MyObject{

    private ObjectId _id;

    private String xfield;

    private String somefield;
}

我希望在我的存储库中具有这种功能,而不需要 for 循环:

public List<MyObject> findAllBySomefieldList(List<String> somefield);

在我的应用程序中:

List<MyObject> myObjects = myRepository.findAllBySomefieldList(myList);

这样做的正确方法是什么?

标签: javamongodbjpa

解决方案


您可以通过MongoDB的运算符使用Mongo模板和条件查询$in,如下:

@Autowired // if you are using spring, if not just handle it yourself
private MongoTemplate mongoTemplate;


Query query=new Query();
query.addCriteria(Criteria.where("somefield").in(myList));
List<MyObject> myObjects=mongoTemplate.find(query, MyObject.class); 

当然,如果你使用的是maven,你必须在pom中添加spring data mongo依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency> 

推荐阅读