Mongodb 如果数组的字段在使用Mongo java驱动程序的所有元素中具有相同的值,则Mongo DB将筛选文档
我需要从数据库中获取文档,数据如下Mongodb 如果数组的字段在使用Mongo java驱动程序的所有元素中具有相同的值,则Mongo DB将筛选文档,mongodb,mongo-java-driver,Mongodb,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
}
]
},
{
"systemName": "DEF",
"systemUsageAttrs" : [
{
"cpuUsage": 30,
"memUsage": 40,
"isActive": false
},
{
"cpuUsage": 88.2,
"memUsage": 33.5,
"isActive": true
}
]
},
{
"systemName": "GHI",
"systemUsageAttrs" : [
{
"cpuUsage": 30,
"memUsage": 40,
"isActive": true
},
{
"cpuUsage": 88.2,
"memUsage": 33.5,
"isActive": true
}
]
}
我使用了下面的一段代码,但它返回2个文档,而不是一个
List<Document> systemDetailsAL = sysUsageDetailsColl.aggregate(
asList(
unwind("$systemUsageAttrs"),
match(eq("systemUsageAttrs.isActive",false)),
group("$_id", Accumulators.first("systemName","$systemName"),
Accumulators.push("systemUsageAttrs", "$systemUsageAttrs")),
project(Projections.fields(Projections.excludeId()))
)
).into(new ArrayList<Document>());
List systemDetailsAL=sysUsageDetailsColl.aggregate(
asList(
展开($systemUsageAttrs”),
匹配(等式(“systemUsageAttrs.isActive”,false)),
组($\u id),累加器。第一个(“系统名”,“系统名”),
蓄能器。推送(“systemUsageAttrs”,“$systemUsageAttrs”),
项目(Projections.fields(Projections.excludeId()))
)
).into(新数组列表());
上面的代码还提供了数组中某个元素的isActive:false文档
预期的输出是systemName:ABC的文档,因为它在数组的所有元素中都有isActive:false
感谢您的帮助/指点。
$not
排除由值不为false的$elemMatch
标识的文档
$elemMatch
标识处于活动状态的文档
不在false
$not
排除该文档放松
@prasad_uuu任何指针都可以指示如何为上述答案编写过滤器。在下面的代码中尝试过,但似乎不起作用`sysUsageDetailsColl.find(Filters.not(Filters.elemMatch(systemUsageAttrs.$.isActive,Filters.nin(“systemUsageAttrs.$.isActive”,false))).projection(Projections.excludeId()).into(new ArrayList())`@vaibhav0228你能做到这一点吗?不,我没有得到你提供的答案的java解决方案。你被什么东西卡住了吗?不能说卡住了,但我不能用java编写相应的过滤器。
db.collection.find({
"systemUsageAttrs": {
"$not": {
"$elemMatch": {
"isActive": {
$nin: [
false
]
}
}
}
}
})