我正在学习MongoDB NoSQL,我陷入了一个问题。
请考虑以下文档:
{
"_id" : ObjectId("63aad45c008cdce77c2c3f9e"),
"title" : "The Express",
"year" : 2008,
"cast" : "Dennis Quaid",
"genres" : "Sports"
},
{
"_id" : ObjectId("63aad45c008cdce77c2c3fa0"),
"title" : "The Express",
"year" : 2008,
"cast" : "Rob Brown",
"genres" : "Sports"
},
{
"_id" : ObjectId("63aad45c008cdce77c2c3fa2"),
"title" : "The Express",
"year" : 2008,
"cast" : "Omar Benson Miller",
"genres" : "Sports"
},
{
"_id" : ObjectId("63aad45c008cdce77c2c416e"),
"title" : "Semi-Pro",
"year" : 2008,
"cast" : "Will Ferrell",
"genres" : "Sports"
},
{
"_id" : ObjectId("63aad45c008cdce77c2c4170"),
"title" : "Semi-Pro",
"year" : 2008,
"cast" : "Woody Harrelson",
"genres" : "Sports"
},
{
"_id" : ObjectId("63aad45c008cdce77c2c4172"),
"title" : "Semi-Pro",
"year" : 2008,
"cast" : "André Benjamin",
"genres" : "Sports"
}
我试着按“年份”和“流派”分组,并不重复地统计所有的“标题”。
我尝试的代码是这样的:
var query1 = {$group: {"_id": { "year": "$year", "genre": "$genres"}, "count": {$sum:1}}}
var stages = [query1]
db.genres.aggregate(stages)
但这是对所有文档的分组,当我只有两个不同的标题时,我得到的“count”的值是6。
我不知道怎样才能获得不重复的头衔。
预期输出如下所示:
{
"_id":{
"year": 2008
"genre": "Sports"
},
"count": 2
}
但是,对于我尝试的代码,输出如下所示:
{
"_id":{
"year": 2008
"genre": "Sports"
},
"count": 6
}
这是错误的,因为我在文档中只有两个不同的标题。
我如何解决这个问题?我如何得到没有重复的标题和这个输出?
非常感谢!无论你需要问什么,请你去问吧...我真的被卡住了,我想学着去做。
1条答案
按热度按时间s3fp2yjn1#
我试图按“年份”和“流派”分组,并不重复地计数所有“标题”。...但这是对所有文档进行分组,当我只有两个不同的标题时,我得到的“计数”值是6。
在我看来,在执行最终计数之前,您需要按片名删除重复项。假设不同的电影不会有相同的片名,则可以执行类似以下的删除重复项操作:
playground demonstration here显示输出符合预期:
或者,你可以为当前分组中的电影标题生成一个具有不同值的数组,然后计算它的大小。再次使用上面关于电影标题的相同假设,如下所示:
Playground demonstration here(具有与上一示例相同的输出)。