mongodb - 聚合框架下的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 解决方案完美运行:
解决方案
请尝试以下查询。
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
}
])
推荐阅读
- google-cloud-platform - GCLOUD:添加一个废弃的实例
- node.js - Node API 和 NGINX 无法提供图像
- r - 计算数据帧的多个子集的斜率时的时间不匹配
- rust - 我的 EXTI0 中断处理程序没有被覆盖/工作正常(STM32F3Discovery)
- reactjs - 在 React 中访问 xml 项内的数组
- java - Spring @Autowire 没有通过 `mvn verify` 找到 bean
- javascript - 谷歌浏览器扩展竞争条件
- docker-compose - 是否可以“组合”命名卷并定义容器之间的路径?(码头工人撰写)
- sql - SQL在前后加一个*
- amazon-web-services - 如何覆盖 RDS Postgres 中的表?