добавить новое поле в результат агрегации Монго - PullRequest
0 голосов
/ 04 декабря 2018

, когда я пытаюсь добавить новое поле с определенным значением, он отлично работает на оболочке mongo:

db.getCollection('collName').aggregate([
{ "$group" : { "_id" : "$idcpt" , "sum" : { "$sum" : "$val"}}},
{$addFields : {idcpt : 1092}}
])

Но когда я пытаюсь реализовать это агрегацию весной, используя org.springframework.data.mongodb.core.aggregation.Aggregation

У меня проблемы с "addFields", я не могу найти правильную комбинацию:

 Aggregation.match(criteria),
 Aggregation.group("idcpt").sum("val").as("sum"),
 Aggregation.fields(....)

любая помощь, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

У меня была такая же проблема, и я нашел по ссылке, предоставленной @Bajal, что вы можете создать проект и одновременно добавить новые поля с помощью 'andExpression'

Aggregation.project("_id", ...).andExpression("1092").as("idcpt");

, но это идея, ноэто не работаетЧтобы это работало, вам нужно немного изменить выражение:

Aggregation.project("_id", ...).andExpression("0 + [0]", 1092).as("idcpt");

Я думаю, и для Expression требуется выражение для вычисления, но я не проверял более внимательно.

см. Пример: https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.aggregation.examples.example5

0 голосов
/ 09 марта 2019

Основываясь на весенних документах, я обнаружил, что мы можем использовать агрегацию, как показано ниже.

Агрегация агрегации = Aggregation.newAggregation (Aggregation.project ("test", ...). AndExpression ("[0] ", 1092) .as (" idcpt "));

и т. П.

Агрегация агрегации = Aggregation.newAggregation (Aggregation.project (" test", ...). и (1092) .asLiteral (). as (" idcpt "));

Надеется помочь вам.

0 голосов
/ 04 декабря 2018

$addFields еще не входит в библиотеку поддержки данных Spring, https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.aggregation.supported-aggregation-operations.

Я столкнулся с той же проблемой ранее, и в итоге я просто запустил ее как необработанный запрос.

 BasicDBList doc = (BasicDBList) JSON.parse(aggregateQuery.toString()); //where aggregateQuery is a StringBuilder that prepares the query string.
 List<DBObject> pipeline = new ArrayList<>();

    for (Object aDoc : doc) {
        DBObject stage = (DBObject) aDoc;
        pipeline.add(stage);
    }
    AggregationOutput output =  mongoTemplate.getDb().getCollection("collName").aggregate(pipeline);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...