MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Aufgrund von Einschränkungen der com.mongodb.BasicDBObject-Ausnahme beim Hinzufügen mehrerer GridFSDBFile-Abfragen

Sie können die Methode auf unten aktualisieren. Sie versuchen, mehrere $and anzugeben Operator, wobei jeder ein Kriterium hat.

Übrigens brauchen Sie kein explizites and ing as mongodb stellt implizit and bereit , wenn Kriterien durch Komma getrennt werden.

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

In Fällen, in denen Sie explizit and benötigen ing, können Sie den folgenden Code verwenden

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