在spring mongo db查询中指定多个条件 [英] Specify multiple criteria's in spring mongo db query

查看:50
本文介绍了在spring mongo db查询中指定多个条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在遍历键/值对列表并为每个键/值执行查找.我可以在sql中创建一个单一的查询文档作为一种联合,这样就只有一个数据库调用.

I am iterating over a list of key/value pairs and executing find for each key/value. Can I create a single query document to be kind of union in sql, So that there will be only one database call.

    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 运算符.

You can refactor your code to create $or expressions. No explicit $and operator needed.

有点像

 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 mongo db查询中指定多个条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆