Je voudrais MapReduce données que j'ai dans MongoDB. Les données sont comme ceci:Utilisation de RegExp dans la fonction de carte
{
type: 'DOMcheck',
category: 'Bad label name',
url: 'http://s1.app.int/part/module/doc/2'
...
}
Maintenant, je voudrais recueillir tous les journaux et compter uniqs par /part/module
partie de l'URL. Je crée la fonction map
:
function() {
var re = new RegExp(/^(http:\/\/[\w\.]*)(\/[\w]*\/[\w]*)/),
u = [];
u = this.url.match(re);
emit(u[2], 1);
}
et la fonction reduce
:
function(key, val) {
var sum = 0;
for(var i in val) sum += val[i];
return sum;
}
et appelez MapReduce: res = db.logs.mapReduce(m, r, {query: {type:"DOMcheck", category: /bad/i}})
Mais j'ai une erreur:
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
}
Quel est le problème avec map
fonctionne ici? Si i emit(this.url, 1)
carte fonctionne très bien ...
Ce sont des allumettes. Si vous appelez simplement la fonction avec le paramètre, il renvoie le 3ème élément. Et je vérifie regex dans la console mongo - ça marche aussi. – NilColor
Euh! Je suis désolé. Il y a une URL cassée qui ne correspond pas au modèle ... Merci pour l'idée;) – NilColor