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