MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

A causa delle limitazioni dell'eccezione com.mongodb.BasicDBObject quando si aggiungono più criteri query GridFSDBFile

È possibile aggiornare il metodo al di sotto. Stai cercando di fornire più $and operatore con ciascuno un criterio.

A proposito, non hai bisogno di un and esplicito ing as mongodb fornisce and impliciti ing quando i criteri sono separati da virgola.

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

Nei casi in cui hai bisogno di and espliciti ing, puoi usare il codice sottostante

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