MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

En raison des limitations de l'exception com.mongodb.BasicDBObject lors de l'ajout de plusieurs critères à la requête GridFSDBFile

Vous pouvez mettre à jour la méthode ci-dessous. Vous essayez de fournir plusieurs $and opérateur avec chacun ayant un critère.

Au fait, vous n'avez pas besoin d'un and explicite ing as mongodb fournit implicitement and lorsque les critères sont séparés par une virgule.

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

Dans les cas où vous avez besoin de and explicites ing, vous pouvez utiliser le code ci-dessous

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