2012-01-30 14 views
0

MongoDB mapReduceでパターンマッチと置換を試みています。私はdbのつぶやきのソースをmapreducingしています。そしてMongoDB MapReduceマップ関数のreplace()を置換

1 - web has 38867 
2 - <a href="http://www.tweetdeck.com" rel="nofollow">TweetDeck</a> has 23873 
3 - <a href="http://www.hootsuite.com" rel="nofollow">HootSuite</a> has 10696 
4 - <a href="http://twitterfeed.com" rel="nofollow">twitterfeed</a> has 9562 
5 - <a href="http://twitter.com/#!/download/iphone" rel="nofollow">Twitter for iPhone</a> has 6818 
6 - <a href="http://www.echofon.com/" rel="nofollow">Echofon</a> has 5869 
7 - <a href="http://www.tweetdeck.com/" rel="nofollow">TweetDeck</a> has 5497 

ようになっ繰り返しの結果は#2と#7の唯一の違いは、HREFの ".COM" 対 ".COM /" です。マップ関数でパターンマッチをしたいのですが、コンパイルエラーが発生しています。私は翻訳のレイヤーで迷子になっているかもしれません。

PHP ==> Mongo ==> javascript。

ここでこれをテストする最も簡単な方法は、シェルからM/Rを実行するだけであり、結果は通常

(
    [assertion] => couldn't compile code for: _map 
    [assertionCode] => 13598 
    [errmsg] => db assertion failure 
    [ok] => 0 
) 

答えて

1

で自分のコードブロック

$map = 'function() { 
      if (!this.source) { 
       return; 
      } 
      s = this.source; 
      s = s.replace(/\/\"/i,"/""); 

      emit(s,1); 
     }'; 

$reduce = "function(previous, current) { 
    var count = 0; 
    for (index in current) { 
     count += current[index]; 
    } 
    return count; 
}"; 

$mapFunc = new MongoCode($map); 
$reduceFunc = new MongoCode($reduce); 
$collectionOutName = 'mrTweetSource'; 
$mr = $db->command(array(
    'mapreduce' => 'tweet', 
    'map' => $mapFunc, 
    'reduce' => $reduceFunc, 
    'out'=>$collectionOutName)); 

あります。これは、シェルが誤った構文を識別できるコンパイルb/cに役立ちます。

「ヒューマンコンパイル」スキルを使用すると、次のようになります。

s = s.replace(/\/\"/i,"/""); 

あなたは/"エスケープと/でそれを交換しますか? "/""を見てください。あまりにも多くの二重引用符があるようです。

関連する問題