1
私は現在、集計を使用して統計ページの登録チームとネットを表示しています。私は各レベルでカウントを行うことができますが、ネットの計算は不正確です。次のように私の集約は次のとおりです。mongoとangularを使用した集計によるカスタム演算
module.exports.registrationStats = function(req, res) {
Registration.aggregate([
{
"$group": {
"_id": {
"day": "$day",
"group": "$group",
"division": "$division",
"level": "$level"
},
"count": { "$sum": 1 }
}
},
{
"$group": {
"_id": {
"day": "$_id.day",
"group": "$_id.group",
"division": "$_id.division"
},
"count": { "$sum": "$count" },
"levels": {
"$push": {
"level": "$_id.level",
"teams": "$count",
"nets" : {$ceil : { $divide: [ "$count" , 5 ] } }
}
}
}
},
{
"$group": {
"_id": {
"day": "$_id.day",
"group": "$_id.group"
},
"count": { "$sum": "$count" },
"divisions": {
"$push": {
"division": "$_id.division",
"count": "$count",
"levels": "$levels"
}
}
}
}
]).exec(function(err, regStats){
if(err) {
console.log("Error grouping registrations");
res.status(500).json(err);
} else {
console.log("Found and grouped " + regStats.length + " regStats");
res.json(regStats);
}
});
};
これは私に出力として以下を提供します:
[
{
"_id": {
"day": "Saturday",
"group": "nonpro"
},
"count": 144,
"divisions": [
{
"division": "Men's",
"count": 69,
"levels": [
{
"level": "BB",
"teams": 30,
"nets": 6
},
{
"level": "A",
"teams": 8,
"nets": 2
},
{
"level": "B",
"teams": 19,
"nets": 4
},
{
"level": "AA",
"teams": 12,
"nets": 3
}
]
},
{
"division": "Women's",
"count": 75,
"levels": [
{
"level": "AA",
"teams": 9,
"nets": 2
},
{
"level": "BB",
"teams": 16,
"nets": 4
},
{
"level": "B",
"teams": 18,
"nets": 4
},
{
"level": "A",
"teams": 32,
"nets": 7
}
]
}
]
}
]
問題は、私はちょうどMath.ceil(divisions.count /上の切り上げフィルタを実行することができないということです5)divisions.netsやMath.ceil(_id.count/5)の値を取得して_id.netsを取得することがあります。
divisions.levels.netsを合計してdivisions.netsにプッシュし、divisions.netsを追加して、その値を_id.netsに入れて、計算が正しく機能するようにする必要があります。
これを行う方法に関するアイデアはありますか?
の残りのため
$sum
&$push
nets
続いlevel
ためnets
を計算する$project
のステージを追加し、それは素晴らしいです!プロジェクトでは、最初のグループから何かを取り出し、2番目のグループで使用することができます。私はそれを他のレベルのグループに「投影する」ことができますか?私が集計について見たのは、UNIXやそれ以外のことを指すように見えるので、私はちょっと失ってしまった。 – user3561890'$ project/$ addFields'を使って各文書にフィールドを追加/上書きすることができます。 – Veeram