首页 > 解决方案 > Spring Data Mongo Query 查询多个字段并一次调用返回

问题描述

首先,正在查询的文档模式如下:

{x:10, y:"temp", z:20} 

集合中还有多个其他文档具有与上述相同的架构。

现在,我有一个列表,其中每个元素包含属于键 x 和 y 的一对值。这可以被描绘为:

       [{10,"temp"}, {20,"temp1"}, .....] 
keys ->  x    y        x    y

现在,我知道,如果我在循环中处理数组并获取每一对,我可以构造一个查询,如:

query.addCriteria(Criteria.where("x").is(10).and("y").is("temp"))

如果它与AND条件匹配,这将返回文档。我可以以这种方式查询列表中的所有对。但是这种方法将涉及对数据库的大量调用,因为对于列表中的每一对,都有一个数据库调用。

为避免这种情况,有什么方法可以使用spring data MongoDb Api在一次调用中查询与列表中每个元素的此AND条件匹配的所有文档?以不同的方式构建,如果可能的话,我想避免遍历数组并进行多次调用。

标签: mongodbmongodb-queryspring-mongodb

解决方案


您可以使用Criteria.orOperator返回与列表中至少一个标准匹配的每个文档。

建立您的标准列表循环遍历您的列表

List<Criteria> criteriaList = new ArrayList<>();
for (item : yourList) {
  criteriaList.add(Criteria.where("x").is(item.x).and("y").is(item.y));
}

使用以下命令构建您的查询orOperator

Query.query(new Criteria.orOperator(criteriaList.toArray(new Criteria[criteriaList.size()])));

推荐阅读