【发布时间】:2020-07-05 17:03:30
【问题描述】:
系统在 DB 中有以下文档信息:
{
"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 驱动程序的 arregration,下面是代码 sn-p:
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>());
上面为我提供了具有两个元素的 ArrayList 的输出,第 0 个元素是具有键“systemName”的文档,值是具有两个元素的 ArrayList。 第一个位置元素是具有键“systemUsageAttrs”的文档,值是具有两个元素的 ArrayList,即所有系统使用详细信息。
尝试的另一件事是组部分是上面的代码,因此它为我提供了 2 个文档的列表
{
serverName: ABC,
systemUsageAttr: {
cpuUSage: xxx,
memUsage: yyy,
isActive:true
}}
和第二个文档
{
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
}
}
感谢任何帮助或指点。
【问题讨论】:
标签: spring mongodb spring-data mongo-java-driver