我有这样的方法:
for (String fieldName : fieldArray) {
Query query = new Query();
query.addCriteria(Criteria.where("data." + fieldName).is("some_constant"));
if (mongoTemplate.find(query, DataPoint.class).size() > 0) {
return true;
}
}
return false;
这段代码看起来效率低下,因为它访问db这么多fieldArray的大小.
有没有办法用单个查询替换它?
解决方法:
它应该是这样的:
List criterias = new ArrayList<>();
for (String fieldName : fieldArray) {
//Create the criterias like you want
criterias.add(Criteria.where("data." + fieldName).is("some_constant"));
}
Query query = new Query(
new Criteria().orOperator(
criterias.toArray( //convert the list into an Criteria[] for the varargs parameter
new Criteria[criterias.size()]
)
)
);
这将创建一个Criteria列表,用于生成Criteria实例,如果一个条件有效(OR操作,一个true就足够了),该实例将有效.
标签:java,spring,mongodb,spring-data
来源: https://codeday.me/bug/20190727/1550606.html