आप नीचे दी गई विधि को अपडेट कर सकते हैं। आप अनेक $and
प्रदान करने का प्रयास कर रहे हैं प्रत्येक के पास एक मानदंड वाला ऑपरेटर।
बीटीडब्ल्यू, आपको स्पष्ट and
की आवश्यकता नहीं है mongodb के रूप में आईएनजी निहित and
. प्रदान करता है जब मानदंड अल्पविराम द्वारा अलग किए जाते हैं।
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();
}
ऐसे मामलों में जहां आपको स्पष्ट and
. की आवश्यकता हो आईएनजी, आप नीचे दिए गए कोड का उपयोग कर सकते हैं
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();
}