2016-05-28 9 views
0

私は、特定のフィールドの整数値の範囲を生成するデータの全体が混乱しているとしましょう...おそらく私がクラスタリングしているために発生間隔のグループ化によってランク付けされたものを見たいと思います。そう:B上等間隔によってMongoDBアグリゲータを使用して、最大と最小の間で一定のデータ間隔でグループ化するにはどうすればよいですか?

[{ 
    _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アグリゲータを使用して最小値と最大値の範囲?

答えて

0

まあ、すぐにMongoDBのアグリゲータのための条件のグループ化構文を策定するために、我々は最初のMongoDB構文ごとにパターンを採用:

すべての最後を記述することなく、そのMUYのrapidamenteを行うために
$cond: [ 
    { <conditional> }, // test the conditional 
    <truthy_value>, // assign if true 
    $cond: [ // evaluate if false 
    { <conditional> }, 
    <truthy_value>, 
    ... // and so forth 
    ] 
] 

その後、我々は、インラインそれを呼び出すか、割り当てることができます

$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 }; 
}; 

:深くネストされた条件付きで実行間隔、我々はこの便利な再帰アルゴリズムを(あなたのシェルスクリプトでインポートしたり、コースのスクリプトをNode.jsのこと)を使用することができます私たちが他の場所で使っている変数私たちの分析