2

以下に示すようなレコードを含むコレクションがあります。

{ "_id" : "279771168740729_100208116788436_242", "user_likes" : false, "message" : "nice work,nice bank", "like_count" : 4, "page_username" : "icicibank", "page_id" : "279771168740729", "can_remove" : false, "from" : { "id" : "100003762913358", "name" : "Ramakant Mirewad" }, "page_name" : "ICICI Bank", "post_id" : "279771168740729_100208116788436", "created_time" : "2012-06-06T15:40:33+0000" }
{ "_id" : "279771168740729_100208116788436_250", "user_likes" : false, "message" : "Best bank of india", "like_count" : 4, "page_username" : "icicibank", "page_id" : "279771168740729", "can_remove" : false, "from" : { "id" : "100003520362950", "name" : "Santosh Pandey" }, "page_name" : "ICICI Bank", "post_id" : "279771168740729_100208116788436", "created_time" : "2012-06-06T15:48:45+0000" }

私の目的は、メッセージ内のキーワード「Best」の出現をカウントすることです。ここで、メッセージには「Best」のみを含めることも、「Best」を含む文を含めることもできます。したがって、私は次のように書きました:

var mapFunction = function() {

    var keyword = "Best";
    var messageStr = this.message;

    if(messageStr.indexOf(keyword) != -1){
    emit(keyword, 1);
    }

};

var reduceFuntion = function(keyword, keywordCountCollection) {

    return Array.sum(keywordCountCollection);
};


db.icici_facebook.mapReduce( mapFunction,reduceFuntion,{out : "icici_fb_keyword_count", verbose : true})

エラーが発生しました:

Sat Aug 17 12:10:25.362 JavaScript execution failed: map reduce failed:{
        "errmsg" : "exception: JavaScript execution failed: TypeError: Cannot ca
ll method 'indexOf' of undefined near 'essageStr.indexOf(keyword) != -1)'  (line
 6)",
        "code" : 16722,
        "ok" : 0
} at src/mongo/shell/collection.js:L970

私も match() などを試しましたが、js関数が認識されていないために何かが足りないと思います-どうすればよいですか?

4

1 に答える 1

2

問題は純粋に Java スクリプト コード、またはドキュメントにメッセージ フィールドが含まれているかどうかを確認していないという事実です。

if(messageStr.indexOf(keyword) != -1){
    emit(keyword, 1);
}

する必要があります

if(messageStr  !=  null && messageStr.indexOf(keyword) != -1){
    emit(keyword, 1);
}

とにかく、クエリを使用すると、目標ははるかに簡単になります。

db.icici_facebook.count({message : /best/i})

于 2013-08-17T08:08:25.567 に答える