Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如果数组的字段在使用Mongo java驱动程序的所有元素中具有相同的值,则Mongo DB将筛选文档_Mongodb_Mongo Java Driver - Fatal编程技术网

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
    排除该文档
  • 您可以将此查询转换为与java兼容的查询

    代码问题,即使用的查询:

  • 您正在进行
    放松
  • 然后查找所有文档-返回第二个文档的第一个子文档
  • 你又在分组了
  • 它还将包含第二个文档,因为它是前一个管道的一部分

  • @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
              ]
            }
          }
        }
      }
    })