限制在 MongoDB
Limit with ties in MongoDB
我有一个包含电影数据的数据库:片名和年份。我需要一个查询来按年份执行电影计数,return 计数最高的年份。我的挣扎是我需要它是动态的,所以如果有平局,它应该 return 所有“平局”年份。
目前我的查询是这样的:
db.movies.aggregate({$group : {_id : "$year", movies: {$sum : 1}}}, {$sort : {"movies" : -1}}, {$limit : 3})
现在我有三部电影之间的平局,因此限制为 3,但我希望它是动态的。
任何帮助,将不胜感激!提前致谢!
使用double $group
,第二组按计数。
db.collection.aggregate({
$group: {
_id: "$year",
movies: {
$sum: 1
}
}
},
{
"$group": {
"_id": "$movies",
"yearList": {
"$push": "$$ROOT._id"
}
}
},
{
$sort: {
"_id": -1
}
},
{
"$limit": 1
})
查询
- 使用
$setWindowFields
,需要 MongoDB >= 5
- 按电影排序(有电影数)
$denseRank
将对成员进行排名,但相同的 movie count
将获得相同的排名
- 我们过滤最大排名 3(如果重复,可能更像下面的示例)
aggregate(
[{"$setWindowFields":
{"output": {"dense-rank": {"$denseRank": {}}},
"sortBy": {"movies": -1}}},
{"$match": {"$expr": {"$lte": ["$dense-rank", 3]}}},
{"$unset": ["dense-rank"]}])
我有一个包含电影数据的数据库:片名和年份。我需要一个查询来按年份执行电影计数,return 计数最高的年份。我的挣扎是我需要它是动态的,所以如果有平局,它应该 return 所有“平局”年份。
目前我的查询是这样的:
db.movies.aggregate({$group : {_id : "$year", movies: {$sum : 1}}}, {$sort : {"movies" : -1}}, {$limit : 3})
现在我有三部电影之间的平局,因此限制为 3,但我希望它是动态的。 任何帮助,将不胜感激!提前致谢!
使用double $group
,第二组按计数。
db.collection.aggregate({
$group: {
_id: "$year",
movies: {
$sum: 1
}
}
},
{
"$group": {
"_id": "$movies",
"yearList": {
"$push": "$$ROOT._id"
}
}
},
{
$sort: {
"_id": -1
}
},
{
"$limit": 1
})
查询
- 使用
$setWindowFields
,需要 MongoDB >= 5 - 按电影排序(有电影数)
$denseRank
将对成员进行排名,但相同的movie count
将获得相同的排名- 我们过滤最大排名 3(如果重复,可能更像下面的示例)
aggregate(
[{"$setWindowFields":
{"output": {"dense-rank": {"$denseRank": {}}},
"sortBy": {"movies": -1}}},
{"$match": {"$expr": {"$lte": ["$dense-rank", 3]}}},
{"$unset": ["dense-rank"]}])