org.springframework.data.mongodb.InvalidMongoDbApiUsageException:您不能添加第二个 'user' 条件。查询已包含

org.springframework.data.mongodb.InvalidMongoDbApiUsageException:you can't add a second 'user' criteria. Query already contains

当我执行这段代码时,我得到 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;
        }

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

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

@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);
}