sql >> データベース >  >> NoSQL >> MongoDB

MongoDBでの発生率を効率的にカウントします

    これが簡単なMapReduce です。 それはあなたが望むことをするでしょう:

    map = function() {
        for (var key in this.values){
            emit(key, {count:1, trues: (this.values[key] ? 1 : 0)});
        }
    }
    
    reduce = function(key, values){
        var out = values[0];
        for (var i=1; i < values.length; i++){
            out.count += values[i].count;
            out.trues += values[i].trues;
        }
        return out;
    }
    
    finalize = function(key, value){
        value.ratio = value.trues / value.count;
        return value;
    }
    
    db.runCommand({mapReduce:'collection',
                   map:map,
                   reduce:reduce,
                   finalize:finalize,
                   out:'counts'
                   })
    
    db.counts.findOne({_id:'alpha'})
    {_id: 'alpha', value: {count: 100, trues: 52, ratio: 0.52}}
    

    アップサート を実行することもできます。 メインコレクションに挿入すると、データをリアルタイムで表示できるようになります。

    for (var key in this.values){
        db.counts.update({_id:key},
                         {$inc:{count:1, trues: (this.values[key] ? 1 : 0)}},
                         true);
    }
    

    実際、これらの方法を組み合わせることもできます。 1回限りのMapReduceバッチジョブを実行してカウントコレクションにデータを入力し、アップサートを使用して最新の状態に保ちます。




    1. MongoDB-数値文字列のみを選択する方法/文字列がmongo-shellで数値かどうかを確認する

    2. Redis-Shakeを使用してRedis™データを移行する方法

    3. オブジェクトの配列をMongoDBに挿入します

    4. 非同期サブタスクを使用した非同期カーソルの反復