我目前在 MongoDB 中有按以下格式排列的物件。
{
_id: new ObjectId("6179a02db235317ce6511429"),
song: 'BIBLICAL',
artist: 'CALUM SCOTT',
expProg: 'Autoplay',
actProg: 'Autoplay',
playedAt: 1635360813
},
{
_id: new ObjectId("6179a117b235317ce651142a"),
song: 'WILL YOU STILL LOVE ME?',
artist: 'CHICAGO',
expProg: 'Autoplay',
actProg: 'Autoplay',
playedAt: 1635361047
},
{
_id: new ObjectId("6179a20cb235317ce651142b"),
song: 'SHY GUY',
artist: 'DIANA KING',
expProg: 'Autoplay',
actProg: 'Autoplay',
playedAt: 1635361292
}
我想知道如果我想計算資料庫中每首歌曲的出現次數,聚合管道會是什么樣子?
在這種情況下,我希望回傳的內容類似于
'BIBLICAL' : 1
'WILL YOU STILL LOVE ME?' : 1
'SHY GUY' : 1
謝謝!
uj5u.com熱心網友回復:
是的,這是可能的,而且非常簡單,只需使用$group stage 和$sum1。
同樣要獲取每首歌曲的值作為鍵,您可以將$replaceRoot與$arrayToObject 一起使用。
db.collection.aggregate([
{
"$group": {
"_id": "$song",
"count": {
"$sum": 1
}
}
},
{
"$replaceRoot": {
"newRoot": {
"$arrayToObject": [
[
{
"k": "$_id",
"v": "$count"
}
]
]
}
}
}
])
示例在這里
輸出是這樣的:
[
{
"BIBLICAL": 1
},
{
"SHY GUY": 1
},
{
"WILL YOU STILL LOVE ME?": 1
}
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/340253.html
