我有一個包含電影資料的資料庫:標題和年份。我需要一個查詢來按年份執行電影計數并回傳計數最高的年份。我的掙扎是我需要它是動態的,所以如果有平局,它應該回傳所有“平局”的年份。
目前我的查詢是這樣的:
db.movies.aggregate({$group : {_id : "$year", movies: {$sum : 1}}}, {$sort : {"movies" : -1}}, {$limit : 3})
現在我在三部電影之間有平局,因此限制為 3,但我希望它是動態的。任何幫助,將不勝感激!提前致謝!
uj5u.com熱心網友回復:
使用 double $group,第二個按計數分組。
db.collection.aggregate({
$group: {
_id: "$year",
movies: {
$sum: 1
}
}
},
{
"$group": {
"_id": "$movies",
"yearList": {
"$push": "$$ROOT._id"
}
}
},
{
$sort: {
"_id": -1
}
},
{
"$limit": 1
})
mongoplayground
uj5u.com熱心網友回復:
詢問
- 使用
$setWindowFields,需要 MongoDB >= 5 - 按電影排序(它有電影計數)
$denseRank將對成員進行排名,但相同movie count將獲得相同的排名- 我們過濾最大等級 3(如果重復,它可能更像下面的示例)
測驗代碼在這里
db.collection.aggregate([
{
"$setWindowFields": {
"output": {
"dense-rank": {
"$denseRank": {}
}
},
"sortBy": {
"movies": -1
}
}
},
{
"$match": {
"$expr": {
"$lte": [
"$dense-rank",
3
]
}
}
},
{
"$unset": [
"dense-rank"
]
}
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359646.html
上一篇:即使mongodb正在運行,mongoose.connect也不作業。貓鼬無法連接
下一篇:使用索引查詢Mongo陣列
