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

使用mongodb筛选聚合

越狐若
2023-03-14

我需要筛选此查询,以便不显示值为undefined的文档。当前,我的代码显示以下结果:

db.getCollection("actors").find({})

db.actors.aggregate([
    {
        $group: { _id: "$cast", Peliculas: { $sum: 1 } },
    },
    { $sort: { Peliculas: -1 } },
    { $limit: 2 }
])

我需要一些过滤器,使undefined消失,以便它显示我作为第一个值:Harold Lloyd

我以前执行过以下操作:

//unwind
    db.getCollection("Tarea").find({})
    fase1 = { $unwind: "$cast"}
    etapas = [fase1]
    db.Tarea.aggregate( etapas )

    //out
    fase1 = { $unwind: "$cast" }
    query2 = { "_id": 0 }
    fase2 = { $project: query2 }
    fase3 = { $out: "actors" }
    etapas = [ fase1, fase2, fase3 ]
    db.Tarea.aggregate( etapas )

共有1个答案

王俊楚
2023-03-14

如果您想消除强制转换数组为空的所有记录,@hbamithkumara答案将非常有效。但是,如果您还想显示所有空转换数组的计数peliculas,默认文本如no cast,您可以尝试以下操作

你可以在这里测试

  db.collection.aggregate([
  {
    $project: {
      cast: {
        $cond: {
          if: {
            $eq: [
              "$cast",
              []
            ]
          },
          then: [
            "No Cast"
          ],
          else: "$cast"
        }
      }
    }
  },
  {
    $group: {
      _id: "$cast",
      Peliculas: {
        $sum: 1
      }
    }
  }
])

结果会像

   [
  {
    "Peliculas": 1,
    "_id": [
      "Paul Boyton"
    ]
  },
  {
    "Peliculas": 1,
    "_id": [
      "Ching Ling Foo"
    ]
  },
  {
    "Peliculas": 21,
    "_id": [
      "No Cast"
    ]
  }
]
 类似资料:
  • 我有如下数据: 我希望在聚合中进行过滤(因为上面的数据来自前几个阶段),以便过滤一个数组,只显示一个数组项,其中用户等于_id。 以下返回空一个数组,如何让过滤器填充一个数组,因为我期望? 其中: 将“$\u id”替换为“$$un”。“用户”显示所有数据。其中一项与预期的一样,因此问题似乎出现在$eq语句中。 如何让过滤器显示一个数组,因为我期望?

  • 我有以下问题:我正在学习如何使用MongoDb和C#。可以在集合中插入项,但无法筛选现有集合以检索一个或多个符合查询条件的项。下面是我的类结构: 下面是我保存对象的方法: 并且正确保存了对象,正如您在图像中所看到的: 但是如何检索包含id为1234的对象事务的文档呢? 我使用的是.NET Core2和MongoDb C#驱动程序版本2.5。 编辑:集合是BsonDocument集合,它不是Tran

  • 我有以下收藏: 我试图将电影(及其所有细节)与用户状态和对该电影的感觉相匹配,并使用聚合: 其中返回: 我希望的结果是匹配user_status中的第一部电影,以获得最终结果: 我想我的下一步是: 但是它不起作用——不确定这个$addFields是否正确,我知道的一个问题是,我的第一个_id是一个ObjectId,第二个似乎是一个字符串。

  • 我一直在为Scala mongo驱动程序中的MongoDB的过滤器而苦苦挣扎。我正在尝试获取集合中的所有文档,其中文档中的特定字符串位于字符串列表中。我在Scala中创建一个字符串列表,然后使用in操作符构建查询: 它起作用了。这是我在打印in运算符筛选器时看到的结果 但是当我试图在第二个参数中传递一个列表来使用第二个重载的方法时,它就不起作用了。我试图用来过滤的列表是动态的。我尝试过scala列

  • 我需要汇总以下记录中的所有标记: https://gist.github.com/sbassi/5642925 (这个片段中有2个样本记录)并按大小对它们进行排序(首先是出现频率更高的标记)。但是我不想考虑具有特定“user_id”的数据(比方说,2,3,6和12)。 以下是我的尝试(只是聚合,没有过滤和排序): db。用户库。聚合({$unwind:“$annotations.data.tags

  • 我想过滤掉字段'a'等于'a'的文档,同时我想对字段'a'进行刻面处理,当然不包括前面的过滤器。我知道您可以将筛选器放在查询的“外部”,以便在不应用该筛选器的情况下获得方面,例如: 弹性搜索 索尔尔 也就是说,对于方面A,我希望保留除A:A以外的所有过滤器,对于方面B,我希望保留除B:B以外的所有过滤器,以此类推。最明显的方法是执行n个查询(n个方面中的每一个),但我不想这样做。