mongodb - Mongodb MapReduce 混淆

标签 mongodb mapreduce mongodb-query

我有一个包含如下记录的集合:

{ "_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 函数没有被识别 - 我应该如何继续?

最佳答案

您的问题纯粹是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})

关于mongodb - Mongodb MapReduce 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18285950/

相关文章:

mongodb - 带总和的聚合/分组

hadoop - 在用 Java 编写 MR 代码时,如何决定何时使用 Map-Side Join 或 Reduce-Side?

javascript - Mongoose/Mongo 和保存

node.js - 如何在 Mongo 中为数组的元素定义唯一索引

hadoop - outputcollector如何工作?

javascript - 在 Mongodb 中搜索和替换?

node.js - 在 MongoDB 中聚合后查找

MongoDB:带有 ObjectId 数组的 $in

mongodb - 如何使用 $geoWithin 条件从最近到最远对结果进行排序?

hadoop - 使用 ChainReducer 抛出异常添加多个 Reducer