mongodb - 在spring mongodb查询中指定多个条件

标签 mongodb spring-data spring-data-mongodb

我正在遍历键/值对列表并为每个键/值执行 find 。我可以在 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运算符(operator)需要。

就像是

 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" }] }

关于mongodb - 在spring mongodb查询中指定多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45719225/

相关文章:

mongodb - 我不小心在 MongoDB 中命名了一个集合 "stats",现在无法重命名它

mongodb - 在 MongoDB 中将两个 $elemMatch 查询与 AND bool 运算符结合起来

java - 像从 JpaRepository 一样创建操作,但使用多个字段

mongodb - Spring data mongodb聚合场景

java - 找不到能够从类型 org.bson.BsonUndefined 转换的转换器

java - 在 Spring MVC 中将带逗号的字符串转换为 double 字

javascript - 模板助手被多次调用

c# - 如何使用 .NET 的 MongoDB 驱动程序的 updateOne() 更新但不替换文档

java - 在 Spring Data MongodB 存储库中查询集合内的字符串

java - 如何在没有_class属性的情况下将spring数据与couchbase一起使用