使用push推送组中的多个项目

时间:2016-11-24 14:04:40

标签: spring-data spring-data-mongodb

我正在尝试使用Spring数据MongoDB中的聚合框架在Java中构建以下查询。关于聚合的文档很差。

如何将DSL转换为此查询

{$unwind : "$item"},
{$unwind : "$item.itemSubSection"},
{$unwind : "$item.itemSubSection.itemProperties"},
{$match : {
    "item.itemSubSection.itemProperties.itemName" : {$nin: ["someItem", 
        "someOtherItem"]}}
    },
    {$match : {"item.itemSubSection.itemProperties.someProperty" : {$exists : true}}},
{$group : 
    { _id: "$_id",
      itemId: {$first : "$itemId"},
      name : {$first : "$name"},
      version : {$first : "$version"},
      itemData: {$push : {label : "$item.itemSubSection.itemProperties.data.someData", 
        userValue : "$item.itemSubSection.itemProperties.itemValue"}},
      createdDateTime : {$first : "$createdDatetime"}
    }}

特别是这部分

          itemData: {$push : {label : "$item.itemSubSection.itemProperties.data.someData", 
        value: "$item.itemSubSection.itemProperties.itemValue"}}

push()似乎只允许你添加1个项目?代码文档基本上不存在。

该部分的shell中此查询的输出是:

"itemData" : [ 
    {
        "label" : "xxyyy",
        "value" : "123456789012"
    }, 
    {
        "label" : "tttyyyyy",
        "value" : "234DGD"
    }, 
    {
        "label" : "sdfsfsdf",
        "value" : "TR"
    }]

提前致谢

1 个答案:

答案 0 :(得分:1)

您可以将BasicDBObject传递给任何聚合阶段。

Aggregation agg = newAggregation(
            group("somegroup").
            push(new BasicDBObject   
                 ("label", "$item.itemSubSection.itemProperties.data.someData").append
                 ("value", "$item.itemSubSection.itemProperties.itemValue"))
                 .as("itemData"));