org.springframework.data.mongodb.InvalidMongoDbApiUsageException:您无法添加第二个“用户"条件.查询已包含 [英] org.springframework.data.mongodb.InvalidMongoDbApiUsageException:you can't add a second 'user' criteria. Query already contains

查看:813
本文介绍了org.springframework.data.mongodb.InvalidMongoDbApiUsageException:您无法添加第二个“用户"条件.查询已包含的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

执行此代码时,我得到org.springframework.data.mongodb.InvalidMongoDbApiUsageException:Due to limitations of the com.mongodb.BasicDocument, you can't add a second 'user' criteria. Query already contains '{ "user" : "5e269fad03f3c63845f5ca52" }'

when I am executing this code I am getting org.springframework.data.mongodb.InvalidMongoDbApiUsageException:Due to limitations of the com.mongodb.BasicDocument, you can't add a second 'user' criteria. Query already contains '{ "user" : "5e269fad03f3c63845f5ca52" }'

    @Autowired
    MongoOperations mongoOperations;
     public List<UserTestDetails> getAllLatestTestByCompletedStatus(List<String> patientIds, String status,String typeOfTest){
            Query query=new Query();
            List<Query> queryList=new ArrayList<>();
            List<UserTestDetails> userTestDetailsList=new ArrayList<>();
         for(String patientId: patientIds) {

             if (!StringUtils.isEmpty(patientId)) {
                 query.addCriteria(Criteria.where("user").is(patientId));
             }
             if (!StringUtils.isEmpty(status)) {
                 query.addCriteria(Criteria.where("status").is(status));
             }
             if (!StringUtils.isEmpty(typeOfTest)) {
                 query.addCriteria(Criteria.where("typeOfTest").is(typeOfTest));
             }
             queryList= Arrays.asList(query);

         }
            userTestDetailsList = mongoOperations.find(query.with(new Sort(Sort.Direction.DESC, "lastUpdated")), UserTestDetails.class);


            return userTestDetailsList;
        }

由于我刚开始接触mongo,所以我不知道自己在哪里做错了

As i am new to spring with mongo so I don't know where i am doing wrong

推荐答案

查询不能有2个相同的字段.而是使用$in运算符,而无需创建额外的Criteria.使用以下代码:

Query cannot have 2 same fields. Instead, use $in operator and no need to create extra Criteria. Use the following code:

@Autowired
private MongoOperations mongoOperations;

public List<UserTestDetails> getAllLatestTestByCompletedStatus(List<String> patientIds, String status, String typeOfTest){
    Criteria criteria = new Criteria();
    if (!patientIds.isEmpty()) {
        criteria.and("user").in(patientIds);
    }
    if (StringUtils.isNotEmpty(status)) {
        criteria.and("status").is(status);
    }
    if (StringUtils.isNotEmpty(typeOfTest)) {
        criteria.and("typeOfTest").is(typeOfTest);
    }

    return mongoOperations.find(new Query(criteria).with(new Sort(Sort.Direction.DESC, "lastUpdated")), UserTestDetails.class);
}

这篇关于org.springframework.data.mongodb.InvalidMongoDbApiUsageException:您无法添加第二个“用户"条件.查询已包含的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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