mongodb - 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条件匹配的所有文档?以不同的方式构建,如果可能的话,我想避免遍历数组并进行多次调用。
解决方案
您可以使用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()])));
推荐阅读
- java - JAXB UnMarshalling 呈现空值(JAXB,Java 1.8)
- c++ - SdFat 将浮点数写入文件 ESP32
- python - log reg 中的预测概率
- javascript - 对数组内的数组进行分组
- reactjs - 如何使用 id 从数组中过滤对象并将所需值从 redux 数组显示到原始数组?
- linux - 我如何知道我的 CPU 是否支持高分辨率计时器?
- amazon-s3 - 如何将 JSON POJO 写入 SCDF 中的 s3 sink?
- javascript - 站点访问者的注视退出存在哪些事件?
- c# - C# 异步客户端套接字示例
- python - 如何修复此错误 IndexError: string index out of range