java - 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);
这样做的正确方法是什么?
解决方案
您可以通过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>
推荐阅读
- javascript - 在这两种情况下,我如何将 newLog 的值打印为空白
- html - 如何在屏幕中心对齐 CSS 框?
- c# - 列表中的Linq选择列表
- linkedin - LinkedIn 通过我们自己的应用程序共享,无法滚动
- reactjs - Firestore 使用 React.js 取消订阅其他功能
- java - 在Java中将数据插入到地图列表中花费了太多时间
- javascript - 如何监视组件中的 vuex 突变/动作?
- android - 错误:无法使用 viewpager2 中 FragmentStateAdapter 中提供的参数调用以下函数
- javascript - 在 onClick 操作后,React 的动态表不会重新渲染
- angular - Angular 9 反应形式:动态添加的验证器不显示错误消息