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

Mongo:一連のドキュメント内の単語の出現回数をカウントします

    MapReduceは、クライアントで操作を行わずにサーバー上のドキュメントを処理できる場合に適している可能性があります(DBサーバーで文字列を分割する機能がないため(未解決の問題)。

    mapから始めます 働き。以下の例(おそらくより堅牢である必要があります)では、各ドキュメントがmapに渡されます。 関数(thisとして )。コードはsummaryを探します フィールドがあり、そこにある場合は小文字にし、スペースで分割してから、1を出力します。 見つかった単語ごとに。

    var map = function() {  
        var summary = this.summary;
        if (summary) { 
            // quick lowercase to normalize per your requirements
            summary = summary.toLowerCase().split(" "); 
            for (var i = summary.length - 1; i >= 0; i--) {
                // might want to remove punctuation, etc. here
                if (summary[i])  {      // make sure there's something
                   emit(summary[i], 1); // store a 1 for each word
                }
            }
        }
    };
    

    次に、reduce 関数、それはmapによって見つけられたすべての結果を合計します 関数であり、emitであった各単語の個別の合計を返します 上記のとおりです。

    var reduce = function( key, values ) {    
        var count = 0;    
        values.forEach(function(v) {            
            count +=v;    
        });
        return count;
    }
    

    最後に、mapReduceを実行します:

    > db.so.mapReduce(map, reduce, {out: "word_count"})
    

    サンプルデータを使用した結果:

    > db.word_count.find().sort({value:-1})
    { "_id" : "is", "value" : 3 }
    { "_id" : "bad", "value" : 2 }
    { "_id" : "good", "value" : 2 }
    { "_id" : "this", "value" : 2 }
    { "_id" : "neither", "value" : 1 }
    { "_id" : "or", "value" : 1 }
    { "_id" : "something", "value" : 1 }
    { "_id" : "that", "value" : 1 }
    


    1. nodeJSでのPub/subの実装

    2. MongoDBは、サブドキュメントの各キーを集計します

    3. RedisAOFとTarantoolWALログの違い

    4. MongoDB + C#ドライバー+要素の配列をクエリします。各配列要素には、クエリを実行するサブドキュメントが含まれています。