spring mongodb中的聚合管道

spring mongodb中的聚合管道,spring,mongodb,Spring,Mongodb,我需要使用spring数据mongo db创建聚合pipleine。我使用下面的代码来过滤对象数组。它工作得非常好 Aggregation aggregation = newAggregation( match(new Criteria().andOperator(criteriaList.toArray(new Criteria[criteriaList.size()]))), project().and(new Aggregat

我需要使用spring数据mongo db创建聚合pipleine。我使用下面的代码来过滤对象数组。它工作得非常好

Aggregation aggregation = newAggregation(
                match(new Criteria().andOperator(criteriaList.toArray(new Criteria[criteriaList.size()]))),
                project().and(new AggregationExpression() {
                    @Override
                    public Document toDocument(AggregationOperationContext aggregationOperationContext) {
                        Document filterExpression = new Document();
                        filterExpression.put("input", "$dailyVisitorStats");
                        filterExpression.put("as", "dailyVisitorStat");
                        filterExpression.put("cond", new Document("$eq", Arrays.asList("$$dailyVisitorStat.weekNum", weekNum)));
                        return new Document("$filter", filterExpression);
                    }
                }).as("dailyVisitorStats")
但对于其他用例,我需要添加两个条件。在上面的“Cond”示例中,我需要添加如下条件

{ $and: [
       { $eq: [ "$$dailyVisitorStat.weekNum", 22 ] },
        { $gte: [ "$$dailyVisitorStat.today", ISODate("2019-06-01T00:00:00.000Z" ) ] },
        { $lte: [ "$$dailyVisitorStat.today", ISODate("2019-06-01T23:59:59.000Z" ) ] }
      ] }
  }
原始MongoDb$项目阶段如下图所示。。我正试着在春天的蒙哥写同样的东西

{
  "dailyVisitorStats":{
  $filter: {
     input: "$dailyVisitorStats",
     as: "dailyVisitorStat",
     cond: { $and: [
       { $eq: [ "$$dailyVisitorStat.weekNum", 22 ] },
        { $gte: [ "$$dailyVisitorStat.today", ISODate("2019-06-01T00:00:00.000Z" ) ] },
        { $lte: [ "$$dailyVisitorStat.today", ISODate("2019-06-01T23:59:59.000Z" ) ] }
      ] }
  }
}
}

我该怎么做呢?

你能试试下面的片段吗?我无法在mongo实例上运行它,但它在语法和(希望)逻辑上都是正确的

Aggregation aggregation = newAggregation(
        match(new Criteria().andOperator(criteriaList.toArray(new Criteria[criteriaList.size()]))),
        project().and(ArrayOperators.Filter.filter("dailyVisitorStats")
                .as("dailyVisitorStat")
                .by(BooleanOperators.And.and(
                        ComparisonOperators.Eq.valueOf("dailyVisitorStat.weekNum").equalTo(weekNum),
                        ComparisonOperators.Gte.valueOf("dailyVisitorStat.today").greaterThanEqualTo(date1),
                        ComparisonOperators.Lte.valueOf("dailyVisitorStat.today").lessThanEqualTo(date2))))
            .as("dailyVisitorStats"));

我使用了这里详细介绍的
$filter
支持

您能试试下面的代码片段吗?我无法在mongo实例上运行它,但它在语法和(希望)逻辑上都是正确的

Aggregation aggregation = newAggregation(
        match(new Criteria().andOperator(criteriaList.toArray(new Criteria[criteriaList.size()]))),
        project().and(ArrayOperators.Filter.filter("dailyVisitorStats")
                .as("dailyVisitorStat")
                .by(BooleanOperators.And.and(
                        ComparisonOperators.Eq.valueOf("dailyVisitorStat.weekNum").equalTo(weekNum),
                        ComparisonOperators.Gte.valueOf("dailyVisitorStat.today").greaterThanEqualTo(date1),
                        ComparisonOperators.Lte.valueOf("dailyVisitorStat.today").lessThanEqualTo(date2))))
            .as("dailyVisitorStats"));

我使用了此处详述的
$filter
支持

您的问题解决了吗?你能通过选择正确的答案来结束这个问题吗?你的问题解决了吗?你能选择一个正确的答案来结束这个问题吗?