sql >> Databasteknik >  >> NoSQL >> MongoDB

På grund av begränsningar av com.mongodb.BasicDBObject-undantaget när man lägger till flera kriterier GridFSDBFile-fråga

Du kan uppdatera metoden till nedan. Du försöker ange flera $and operatör där var och en har ett kriterium.

Btw, du behöver inte en explicit and ing som mongodb tillhandahåller implicit and när kriterier separeras med kommatecken.

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

I de fall du behöver uttryckliga and ing, kan du använda nedanstående kod

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



  1. Aggregera grupp efter datum med sommartidsförskjutning

  2. MongoDB:matcha icke-tomt dokument i array

  3. Frågar med joins och filter i Mongoose

  4. mongoexport utan _id-fält