MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Devido a limitações da exceção com.mongodb.BasicDBObject ao incluir vários critérios de consulta GridFSDBFile


Você pode atualizar o método para abaixo. Você está tentando fornecer vários $and operador com cada um tendo um critério.

Aliás, você não precisa de um and explícito ing como mongodb fornece and implícito quando os critérios são separados por vírgula.
public void getFile(Map<String, Object> metaData) throws Exception {
    Criteria criteria = new Criteria();
    metaData.forEach((k, v) -> criteria.and("metadata." + k).is(v));
    GridFSDBFile gridFSDBFile = gridFsOperations.findOne(new Query(criteria));
    if (gridFSDBFile == null) {
        throw new HttpConflictException();
}

Nos casos em que você precisa de and explícitos ing, você pode usar o código abaixo
public void getFile(Map<String, Object> metaData) throws Exception {
    Criteria criteria = new Criteria();
    Criteria[] andExpressions = metaData.entrySet().stream().
            map(kv -> Criteria.where("data." + kv.getKey()).is(kv.getValue()))
            .toArray(Criteria[]::new);
    Query andQuery = new Query();
    Criteria andCriteria = new Criteria();
    andQuery.addCriteria(andCriteria.andOperator(andExpressions));
    GridFSDBFile gridFSDBFile = gridFsOperations.findOne(andQuery);
    if (gridFSDBFile == null) {
        throw new HttpConflictException();
}