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

Pushing more than one item in a group using push

我正在尝试使用 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"
    }]

提前致谢

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

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