さて、MongoDB アグリゲータの条件付きグループ化構文をすばやく定式化するために、まず MongoDB 構文ごとに次のパターンを採用します。
$cond: [
{ <conditional> }, // test the conditional
<truthy_value>, // assign if true
$cond: [ // evaluate if false
{ <conditional> },
<truthy_value>,
... // and so forth
]
]
深くネストされた条件で最後の間隔をすべて書き出す必要なく、非常に迅速に行うために、この便利な再帰アルゴリズムを使用できます (もちろん、シェル スクリプトまたは node.js スクリプトにインポートします)。
$condIntervalBuilder = function (field, interval, min, max) {
if (min < max - 1) {
var cond = [
{ '$and': [{ $gt:[field, min] }, { $lte: [field, min + interval] }] },
[min, '-', (min + interval)].join('')
];
if ((min + interval) > max) {
cond.push(ag.$condIntervalBuilder(field, (max - min), min, max));
} else {
min += interval;
cond.push(ag.$condIntervalBuilder(field, interval, min, max));
}
} else if (min >= max - 1 ) {
var cond = [
{ $gt: [field, max] },
[ max, '<' ].join(''), // Accounts for all outside the range
[ min, '<' ].join('') // Lesser upper bound
];
}
return { $cond: cond };
};
次に、インラインで呼び出すか、分析の他の場所で使用する変数に割り当てることができます。