I am iterating over a list of key/value pairs and executing find for each key/value. Can I create a single query document to be kind of union in sql, So that there will be only one database call.
List<User> userList = new ArrayList<User>();
for (Map accounts:attributes) {
Query query = new Query();
List<Criteria> andCriteriaList = new ArrayList<Criteria>();
accounts.forEach((key, value) -> {
Criteria criteria = Criteria.where((String) key).is(value);
andCriteriaList.add(criteria);
});
query.addCriteria(new Criteria().andOperator(andCriteriaList.toArray(new Criteria[andCriteriaList.size()])));
if (mongoTemplate.exists(query, User.class)) {
userList.add((User)mongoTemplate.find(query, User.class));
//System.out.println(mongoTemplate.find(query, User.class));
}
Thanks,
$inoperator. Something likeQuery query = new Query(); query.addCriteria(Criteria.where("UserID").in(userList.stream().map(User::getId).collect(Collectors.toList()))); List<User> users = mongoTemplate.find(query,User.class);Queryobject dynamically too from your incoming attributes. I saw the latest update. What problems are you running into while doing that conversion ?