在spring mongodb查询中指定多个标准
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在spring mongodb查询中指定多个标准相关的知识,希望对你有一定的参考价值。
我正在迭代一个键/值对列表,并为每个键/值执行查找。我可以创建一个单独的查询文档作为sql中的一种联合,因此只有一个数据库调用。
List<User> userList = new ArrayList<User>();
for (Map accounts:attributes) {
Query query = new Query();
List<Criteria> andCriteriaList = new ArrayList<Criteria>();
accounts.forEach((key, value) -> {
Criteria criteria = Criteria.where((String) key).is(value);
andCriteriaList.add(criteria);
});
query.addCriteria(new Criteria().andOperator(andCriteriaList.toArray(new Criteria[andCriteriaList.size()])));
if (mongoTemplate.exists(query, User.class)) {
userList.add((User)mongoTemplate.find(query, User.class));
//System.out.println(mongoTemplate.find(query, User.class));
}
谢谢,
答案
您可以重构代码以创建$or
表达式。没有明确的$and
运算符。
就像是
Query orQuery = new Query();
Criteria orCriteria = new Criteria();
List<Criteria> orExpression = new ArrayList<>();
for (Map<String, Object> accounts : attributes) {
Criteria expression = new Criteria();
accounts.forEach((key, value) -> expression.and(key).is(value));
orExpression.add(expression);
}
orQuery.addCriteria(orCriteria.orOperator(orExpression.toArray(new Criteria[orExpression.size()])));
List<User> userList = mongoOperations.find(orQuery, User.class);
这应该输出查询
{ "$or" : [{ "key1" : "value1", "key2" : "value2" }, { "key3" : "value3", "key4" : "value4" }] }
以上是关于在spring mongodb查询中指定多个标准的主要内容,如果未能解决你的问题,请参考以下文章
如何在spring data mongoDB中指定数据库名称
Spring Boot 应用程序未连接到 Mongodb 的 application.property 中指定的数据库
mongodb更新查询删除命令中指定的字段以外的所有数组字段
mongodb更新查询删除命令中指定的字段以外的所有数组字段