Spring Mongo DB:根据具有嵌套数组的文档聚合文档输出
系统在数据库中具有以下文档信息:Spring Mongo DB:根据具有嵌套数组的文档聚合文档输出,spring,mongodb,spring-data,mongo-java-driver,Spring,Mongodb,Spring Data,Mongo Java Driver,系统在数据库中具有以下文档信息: { "systemName": "ABC", "systemUsageAttrs" : [ { "cpuUsage": 30, "memUsage": 40,
{
"systemName": "ABC",
"systemUsageAttrs" : [
{
"cpuUsage": 30,
"memUsage": 40,
"isActive": false
},
{
"cpuUsage": 88.2,
"memUsage": 33.5,
"isActive": false
},
{
"cpuUsage": 66.3,
"memUsage": 79.5,
"isActive": true
},
{
"cpuUsage": 80.5,
"memUsage": 63,
"isActive": true
}
]
}
我已经使用mongo java驱动程序尝试了延迟,下面是以下代码段:
List<Document> systemDetailsAL = sysUsageDetailsColl.aggregate(
asList(
match(eq("systemName","ABC")),
unwind("$systemUsageAttrs"),
match(eq("systemUsageAttrs.isAcive",true)),
group("$_id", Accumulators.push("systemName","$systemName"),
Accumulators.push("systemUsageAttrs", "$systemUsageAttrs")),
project(Projections.fields(Projections.excludeId(),
Projections.include("systemName", "systemUsageAttrs")))
)
).into(new ArrayList<Document>());
和第二份文件
{
serverName: ABC,
systemUsageAttr: {
cpuUSage: ttt,
memUsage: sss,
isActive:true
}}
是否可以使用聚合返回一个只有1个元素的列表,如下面给出的输出
{
serverName: ABC,
systemUsageAttr: [
{
cpuUSage: xxx,
memUsage: yyy,
isActive:true
},
{
cpuUSage: ttt,
memUsage: sss,
isActive:true
}
}
感谢您的帮助或指点。更改这两个阶段:
group("$_id", Accumulators.push("systemName","$systemName"),
Accumulators.push("systemUsageAttrs", "$systemUsageAttrs")),
project(Projections.fields(Projections.excludeId(),
Projections.include("systemName", "systemUsageAttrs")))
)
如下所示,以获得所需的结果:
group("$_id", Accumulators.push("systemUsageAttrs", "$systemUsageAttrs"),
Accumulators.first("systemName", "$systemName")),
project(Projections.excludeId()))
请注意
累加器的用法。首先
(组聚合运算符)。非常感谢@prasad\uz,这非常有效。我知道这与group有关,但正如我对mongo所知,所以不知道各种聚合操作符及其用法。
group("$_id", Accumulators.push("systemUsageAttrs", "$systemUsageAttrs"),
Accumulators.first("systemName", "$systemName")),
project(Projections.excludeId()))