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

På grund af begrænsninger af com.mongodb.BasicDBObject-undtagelsen, når der tilføjes flere kriterier GridFSDBFile-forespørgsel

Du kan opdatere metoden til nedenfor. Du forsøger at angive flere $and operatør med hver deres kriterier.

Btw, du behøver ikke en eksplicit and ing som mongodb giver implicit and når kriterier er adskilt med komma.

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 tilfælde, hvor du har brug for eksplicit and ing, kan du bruge nedenstående kode

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. Sådan aktiverer du distribueret/clustered cache, når du bruger redis med spring data cache

  2. Mongodb bulk skrivefejl

  3. Mongoose indlejrede dokumenter / DocumentsArrays id

  4. Hvordan får man fjernet dokument i MongoDB?