Bạn có thể cập nhật phương pháp bên dưới. Bạn đang cố gắng cung cấp nhiều $and
mỗi toán tử có một tiêu chí.
Btw, bạn không cần and
rõ ràng ing như mongodb cung cấp and
ngầm định ing khi các tiêu chí được phân tách bằng dấu phẩy.
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();
}
Trong những trường hợp bạn cần and
rõ ràng ing, bạn có thể sử dụng mã dưới đây
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();
}