replace () в функции карты MongoDB MapReduce - PullRequest
0 голосов
/ 30 января 2012

Я пытаюсь выполнить сопоставление с образцом и заменить его в моем MongoDB mapReduce.Я восстанавливаю источники твитов в БД.И получение повторяющихся результатов, таких как

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 - это ".com /" vs ".com" в href.Я хотел бы сделать сопоставление с образцом в моей функции карты, но я получаю ошибки компиляции.Я могу потеряться в слоях перевода.

PHP ==> Mongo ==> javascript.

Вот мой блок кода

$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)); 

результат

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

1 Ответ

1 голос
/ 31 января 2012

Как правило, самый простой способ проверить это - просто запустить M / R из оболочки. Это поможет с компиляцией, поскольку оболочка может определить неверный синтаксис.

Если я использую свои навыки "человеческой компиляции", следующее выглядит неправильно.

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

Вы экранируете /" и заменяете его на /? Взгляните на "/"", это похоже на слишком много двойных кавычек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...