Vous pouvez mettre à jour la méthode ci-dessous. Vous essayez de fournir plusieurs $and
opérateur avec chacun ayant un critère.
Au fait, vous n'avez pas besoin d'un and
explicite ing as mongodb fournit implicitement and
lorsque les critères sont séparés par une virgule.
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();
}
Dans les cas où vous avez besoin de and
explicites ing, vous pouvez utiliser le code ci-dessous
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();
}