sql >> Databáze >  >> NoSQL >> MongoDB

Kvůli omezení výjimky com.mongodb.BasicDBObject při přidání více kritérií dotaz GridFSDBFile

Metodu můžete aktualizovat níže. Pokoušíte se poskytnout více $and operátor, přičemž každý má svá kritéria.

Btw, nepotřebujete explicitní and ing jako mongodb poskytuje implicitní and když jsou kritéria oddělena čárkou.

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

V případech, kdy potřebujete explicitní and ing, můžete použít níže uvedený kód

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. rozdíl mezi agregátem ($match) a nálezem v MongoDB?

  2. Jak najít podobnost v poli dokumentu MongoDB?

  3. meteor/mongodb:Použijte jinou DB pro autentizaci a čtení/zápis

  4. PHP Mongo Chyba při čtení ze zásuvky