将新字段添加到mongo聚合的结果中

时间:2018-12-04 14:35:37

标签: spring mongodb aggregation-framework

当我尝试添加具有特定值的新字段时,它在mongo shell上运行良好:

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 :(得分:0)

const [this.id, x, y, width, height] = line.replace(/[^\d]+/g, ' ').split(' '); 尚未包含在Spring数据支持库中,https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.aggregation.supported-aggregation-operations

我之前也遇到过同样的问题,最终我只是将其作为原始查询运行。

$addFields

答案 1 :(得分:0)

我遇到了同样的问题,我在@Bajal提供的链接中发现可以创建一个项目并使用'andExpression'同时添加新字段

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

这是个主意,但不起作用。 要使其正常工作,您需要稍微更改表达式:

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

我猜想andExpression需要一个表达式来计算,但是我并没有更加仔细地检查。

参见示例:https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.aggregation.examples.example5

答案 2 :(得分:0)

基于spring文档,我发现我们可以如下使用Aggregation。

  

聚合聚合= Aggregation.newAggregation(      Aggregation.project(“ test”,...)。andExpression(“ [0]”,1092).as(“ idcpt”)));

像这样

  

聚合聚合= Aggregation.newAggregation(      Aggregation.project(“ test”,...)。和(1092).asLiteral()。as(“ idcpt”)));

希望能为您提供帮助。