MongoDB问题聚合无重复



我正在学习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"
}

我正试着按"年"来分组。和"genres",并计算所有的"标题"没有重复。

我尝试的代码是:

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 
}

这是错误的,因为我在文档中只有两个不同的标题。

我该如何解决这个问题?我怎样才能在没有重复和输出的情况下获得标题?

非常感谢!无论你需要问什么,请尽管问……我真的卡住了,我想学会做这件事。

我正在尝试按"年份"进行分组。和"genres",并计算所有的"标题"没有重复。…这里是对所有文档和count值进行分组当我只有两个不同的标题时,我得到的是6。

在我看来,在执行最终计数之前,您需要按标题进行重复数据删除。假设不同的电影没有相同的标题,像这样的代码将执行重复数据删除:

db.collection.aggregate([
{
$group: {
_id: "$title",
year: {
$first: "$year"
},
genre: {
$first: "genre"
},

}
},
{
$group: {
"_id": {
"year": "$year",
"genre": "$genres",

},
"count": {
$sum: 1
}
}
}
])

这里的游乐场演示显示了预期的输出:

[
{
"_id": {
"genre": "Sports",
"year": 2008
},
"count": 2
}
]

或者,您可以为当前分组中的电影标题生成一个具有不同值的数组,然后计算其大小。同样,对上面的电影标题进行相同的假设,像这样:

db.collection.aggregate([
{
$group: {
"_id": {
"year": "$year",
"genre": "$genres",

},
"count": {
"$addToSet": "$title"
}
}
},
{
"$addFields": {
"count": {
$size: "$count"
}
}
}
])

Playground演示在这里(与前一个示例的输出相同)。

相关内容

  • 没有找到相关文章

最新更新