Использование RegExp в функции карты - PullRequest
0 голосов
/ 25 февраля 2011

Я хотел бы, чтобы данные MapReduce были в MongoDB.Данные выглядят следующим образом:

{
  type: 'DOMcheck',
  category: 'Bad label name',
  url: 'http://s1.app.int/part/module/doc/2'
  ...
}

Теперь я хотел бы собрать все журналы и подсчитать uniqs по /part/module части URL.Я создаю map функцию:

function() {
  var  re = new RegExp(/^(http:\/\/[\w\.]*)(\/[\w]*\/[\w]*)/),
       u = [];
  u = this.url.match(re);
  emit(u[2], 1);
}

и reduce функцию:

function(key, val) {
  var sum = 0;
  for(var i in val) sum += val[i];
  return sum;
}

и вызываю MapReduce: res = db.logs.mapReduce(m, r, {query: {type:"DOMcheck", category: /bad/i}})

Но у меня есть ошибка:

uncaught exception: map reduce failed: {
"assertion" : "map invoke failed: JS Error: TypeError: u has no properties nofile_b:3",
"assertionCode" : 9014,
"errmsg" : "db assertion failure",
"ok" : 0
}

Что здесь с функцией map?Если я emit(this.url, 1) карта работает просто отлично ...

Ответы [ 2 ]

1 голос
/ 25 февраля 2011

Похоже, ваше регулярное выражение не соответствует URL.Вот почему у вас нет свойств.

0 голосов
/ 28 февраля 2011

Вы можете установить процент недопустимых записей, чтобы пропустить желаемое количество недопустимых записей, не провалив работу И вы можете добавить счетчик для неверной записи.

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