0

特定のフィールドの整数値の範囲を生成するデータの混乱があるとしましょう...おそらくクラスタリングを行っているため、発生間隔のグループ化によってランク付けされたデータを確認したいと思います...次のように:

[{
  _id: {
    response_time: "3-4"
  },
  count: 234,
  countries: ['US', 'Canada', 'UK']
}, {
  _id: {
    response_time: "4-5"
  },
  count: 452,
  countries: ['US', 'Canada', 'UK', 'Poland']
}, ...
}]

A) MongoDB アグリゲーターを使用して、B) 最小範囲と最大範囲にわたって等間隔でコレクション データをグループ化するための迅速で汚い方法をどのように作成できますか?

4

1 に答える 1

0

さて、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 };
};

次に、インラインで呼び出すか、分析の他の場所で使用する変数に割り当てることができます。

于 2016-05-28T07:04:07.607 に答える