我正在尝试使用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"
}]
提前致谢
答案 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"));