当前位置: 首页 > 知识库问答 >
问题:

如果数组的字段在使用mongo java驱动程序的所有元素中具有相同的值,Mongo DB将过滤文档

巢烨
2023-03-14

我需要从数据库中获取文档,数据如下

{
   "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>());

上面的代码还提供了一个文档,该文档对数组中的一个元素具有isActive:false。

预期输出是systemName:ABC的Document,因为它在数组的所有元素中都有isActive:false。

感谢任何帮助/建议。

共有1个答案

陈实
2023-03-14

db.collection.find({
  "systemUsageAttrs": {
    "$not": {
      "$elemMatch": {
        "isActive": {
          $nin: [
            false
          ]
        }
      }
    }
  }
})

$not不包括由$elemMatch标识的文档,其中值不为false。

    < li> $elemMatch标识< code >有效不在< code >假中的文档 < li> $not不包括该文档。

您可以将这个查询转换成java兼容的。

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

  1. 您正在执行展开
  2. 然后查找所有文档-它返回第二个文档的第一个子文档
  3. 您再次分组
  4. 它还将有第二个文档,因为它是前一个管道的一部分
 类似资料:
  • 问题内容: Swift中是否有一个函数可以检查数组的所有元素是否具有相同的值?就我而言,它是一个type数组。我知道我可以使用一个简单的for循环对其进行迭代,我只是想知道是否内置了某些东西并且速度更快。 问题答案: 任何方法都必须遍历所有元素,直到找到另一个元素: 可以使用以下函数来代替显式循环: 如果数组元素是(例如),则可以从数组元素创建一个(从Swift 1.2开始可用),并检查它是否恰好

  • 我想用Java做一个小游戏swing,但我想不出一个解决问题的好方法。我有两个阵列,第一个是板条箱 第二个是Tile对象。 我想检查一下是否所有的板条箱都放在瓷砖上。我的意思是,不管哪个盒子在哪个瓷砖上,都有几个盒子,几个瓷砖,每个盒子都应该放在一块瓷砖上,不管哪个盒子在哪个瓷砖上。在游戏中,玩家行走并移动箱子,所以他们的坐标会发生变化。瓷砖坐标不变(如果可能有帮助的话)。这将是我的停止状态。当板

  • 我想给数组的每个元素添加相同的值。我的方法是使用default添加值。它与这个有一点不同,因为:我不知道如何写入数组的现有元素,而不是新元素。 输入: 提前感谢!

  • 我有这个问题: 您将获得一个整数 A 和一个整数 k 的数组。您可以将 A 的元素递减到 k 次,目标是生成一个元素都相等的连续子数组。返回可以用这种方式生成的最长的连续子数组的长度。 例如,如果 A 是 [1,7,3,4,6,5] 并且 k 是 6,那么您可以生成 [1,7,3,4-1,6-1-1-1,5-1-1] = [1,7,3,3,3,3],因此您将返回 4。 最佳解决方案是什么?

  • 我正在学习用java实现链表类。但每次调用get方法时,都会得到最后一个节点的内容。我不知道为什么。代码如下:, 我得到的结果是, 我想在类中添加一些数据,并创建该类的链接列表。 提前谢谢!

  • 问题内容: 我对Python中的字典有疑问。 这里是: 我有一个像 现在,我想通过相同的值获取所有关键元素,并将其保存在新的字典中。 新的Dict应该如下所示: 问题答案: 如果您对新字典中的列表而不是元组感到满意,则可以使用 如果您想避免使用,也可以这样做