Как исправить нулевое значение в групповой агрегации Spring Mon go? - PullRequest
1 голос
/ 18 июня 2020

Для этого запроса

Aggregation aggregation = Aggregation.newAggregation(
        match(Criteria.where("userId").is(accountId)
                .and("processingDay").gte(startMillis).lte(endMillis)),
        sort(Sort.Direction.valueOf("ASC"), "x1"),
        sort(Sort.Direction.valueOf("ASC"),  "x2"),
        Aggregation.group("A", "state")
                .push(new BasicDBObject("x1", "$x1")
                        .append("x2", "$x2")
                        .append("A", "$A")
                ).as("XS"));

результат [{"A":null, "XS":{"A":NOT_NULL,...}}], как заполнить A значение, если оно равно нулю?

1 Ответ

0 голосов
/ 20 июня 2020

Проблема в том, что group("A", "state") создает такой объект:

"_id":{"A":"...", "state":"..."}

Но он ожидает (Output.class) поле A в документе root.

Просто добавьте оператор $first, чтобы добавить значение 1 st A в документ root:

Aggregation aggregation = Aggregation.newAggregation(
    match(Criteria.where("userId").is(accountId)
            .and("processingDay").gte(startMillis).lte(endMillis)),
    //sort(Sort.by(Direction.ASC, "x1", "x2")) // explicitly
    sort(Sort.by("x1", "x2")), //Default is ASC
    group("A", "state")
        .first("A").as("A")
        .push(new BasicDBObject("x1", "$x1")
                .append("x2", "$x2")
                .append("A", "$A")
        ).as("XS"));
...