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

MongoDBMap-reduceマップ関数で変数を使用する方法

    @Dave Griffithが指摘しているように、scopeを使用できます。 mapReduceのパラメーター 機能。

    他の人が指摘しているように、ドキュメントがあまり詳細ではないため、関数に適切に渡す方法を理解するのに少し苦労しました。最後に、mapReduceに気づきました 3つのパラメータを期待しています:

    • マップ関数
    • 機能を減らす
    • ドキュメントで定義された1つ以上のパラメータを持つオブジェクト

    最終的に、Javascriptで次のコードに到達しました:

    // I define a variable external to my map and to my reduce functions
    var KEYS = {STATS: "stats"};
    
    function m() {
        // I use my global variable inside the map function
        emit(KEYS.STATS, 1);
    }
    
    function r(key, values) {
        // I use a helper function
        return sumValues(values);
    }
    
    // Helper function in the global scope
    function sumValues(values) {
        var result = 0;
        values.forEach(function(value) {
            result += value;
        });
        return result;
    }
    
    db.something.mapReduce(
        m,
        r,
        {
             out: {inline: 1},
             // I use the scope param to pass in my variables and functions
             scope: {
                 KEYS: KEYS,
                 sumValues: sumValues // of course, you can pass function objects too
             }
        }
    );
    


    1. mongo-サーバー127.0.0.1:27017に接続できませんでした

    2. Redisは、反復やポップなしでリストのすべての値をフェッチします

    3. Windows 7マシン上のMongoDB:接続できませんでした

    4. トップMongoDBリソース