這裏是我的MongoDB集合模式:MongoDB不同文檔中兩個數組中項目的聚合計數?
company: String
model: String
cons: [String] // array of tags that were marked as "cons"
pros: [String] // array of tags that were marked as "pros"
我需要聚合,所以我得到以下輸出:
[{
"_id": {
"company": "Lenovo",
"model": "T400"
},
"tags": {
tag: "SomeTag"
pros: 124 // number of times, "SomeTag" tag was found in "pros" array in `Lenovo T400`
cons: 345 // number of times, "SomeTag" tag was found in "cons" array in `Lenovo T400`
}
}...]
我試着做到以下幾點:
var aggParams = {};
aggParams.push({ $unwind: '$cons' });
aggParams.push({ $unwind: '$pros' });
aggParams.push({$group: {
_id: {
company: '$company',
model: '$model',
consTag: '$cons'
},
consTagCount: { $sum: 1 }
}});
aggParams.push({$group: {
_id: {
company: '$_id.company',
model: '$_id.model',
prosTag: '$pros'
},
prosTagCount: { $sum: 1 }
}});
aggParams.push({$group: {
_id: {
company:'$_id.company',
model: '$_id.model'
},
tags: { $push: { tag: { $or: ['$_id.consTag', '$_id.prosTag'] }, cons: '$consTagCount', pros: '$prosTagCount'} }
}});
但我得到了以下結果:
{
"_id": {
"company": "Lenovo",
"model": "T400"
},
"tags": [
{
"tag": false,
"pros": 7
}
]
}
與aggregation
做什麼正確的方法是什麼?
我們可以在這裏假設,「優點」或「缺點」中的「標記」在兩個陣列中都是唯一的,或者在兩者中都是唯一的?當然每個文件。 –
正確,每個文檔的標籤都是唯一的(兩個數組中的「唯一」) –
所以要完全清楚。 「SomeTag」只會出現在每個文檔只有一次「贊成」而不是「缺點」一次? –