首页 > 解决方案 > 聚合框架下的mongodb中的$count

问题描述

我需要编写一个解决以下问题的代码:

在流派上,获得参与更多流派的顶级演员。

我从以下 .json 文件开始:https ://drive.google.com/file/d/1VKuhce2ofjLjYEoND_Fz2wqcYHAf6kkZ/view

所以我创建了流派集合:

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

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

然后我试图聚合它们。我会说我几乎拥有它,只是我需要出现在“numgeneros”中的计数作为每个演员的流派计数

db.genres.aggregate([
   {$match: { 
       "genres" : {$ne:"Undefined"},
       "cast" : {$ne:"Undefined"}
       }},

       {$group: {
            _id: "$cast",
            numgeneros: {$count: "$genres"},
            genres: { $addToSet: "$genres"}
       }},
       {$sort: {numgeneros:-1}},
    {$limit:10}
])

这就是我得到的:

在此处输入图像描述

我需要的是,例如,Harold Lloyd 的计数等于 4,这是它出现的类型数量而不是 236。

提前感谢大家!

@RLD 解决方案完美运行:

在此处输入图像描述

标签: mongodbcountaggregation-framework

解决方案


请尝试以下查询。

db.genres.aggregate([
  {
    $match: {
      "genres": {
        $ne: "Undefined"
      },
      "cast": {
        $ne: "Undefined"
      }
    }
  },
  {
    $group: {
      _id: "$cast",
      genreset: {
        $addToSet: "$genres"
      }
    }
  },
  {
    $project: {
      _id: 1,
      numgeneros: {
        $size: "$genreset"
      },
      genreset:1
    }
  },
  {
    $sort: {
      numgeneros: -1
    }
  },
  {
    $limit: 10
  }
])

推荐阅读