我想使用多个标准来执行聚合。问题是我不知道如何通过多个标准。我是否像下面这样声明多个匹配操作?
MatchOperation matchOperation1 = Aggregation.match(criteria);
MatchOperation matchOperation2 = Aggregation.match(criteria2);
如果是,那么如何将它们传递给聚合方法?我认为应该可以创建一个符合多种标准的MatchOperation,但我还没有在网上找到这样的例子。
发布于 2020-06-12 10:07:21
,我是否像下面这样声明多个匹配操作?
MatchOperation matchOperation1 =Aggregation.match(准则);MatchOperation matchOperation2 = Aggregation.match(criteria2);
Criteria
类有一个and
方法,它允许组合两个条件。例如,考虑以下三个文件:
{ _id: 1, size: 10, color: "blue" }
{ _id: 2, size: 12, color: "red" }
{ _id: 3, size: 8, color: "blue" }
聚合match
阶段的定义如下:
Aggregation.match(Criteria.where("size").gt(new Integer(8))
.and("color").is("blue")
)
这将返回带有_id: 1
的文档。
发布于 2020-06-12 10:47:59
你可以试试这样的东西
final Criteria firstMatchCriteria = Criteria.where("fielname").is(someValue)
final Criteria secondMatchCriteria = Criteria.where("fielname").is(someValue)
final Aggregation aggregation = Aggregation.newAggregation( match(firstMatchCriteria),unwind("FIELD_"),match(secondMatchCriteria),project())
发布于 2020-07-11 17:45:48
在需要动态筛选时,还可以在criteria
中使用MatchOperation
列表:
List<Criteria> criterias = new ArrayList<>();
for (String key : mongoRequest.getFilterQuery().keySet()) {
Criteria ci= new Criteria();
List<Object> listOfValues=new ArrayList<>();
for(Object value:mongoRequest.getFilterQuery().get(key)){
listOfValues.add(value);
}
ci = Criteria.where(key).in(listOfValues);
criterias.add(ci);
}
MatchOperation match =new MatchOperation(!criterias.isEmpty()?new Criteria().andOperator(criterias.toArray(new Criteria[criterias.size()])):new Criteria());
您还可以引用此链接link。
https://stackoverflow.com/questions/62340986
复制相似问题