J'utilise la bibliothèque node-mongodb-native pour exécuter MapReduce sur MongoDB (à partir de node.js).MapReduce, MongoDB et node-mongodb-native
Voici mon code:
var map = function() {
emit(this._id, {'count': this.count});
};
var reduce = function(key, values) {
return {'testing':1};
};
collection.mapReduce(
map,
reduce,
{
query:{ '_id': /s.*/g },
sort: {'count': -1},
limit: 10,
jsMode: true,
verbose: false,
out: { inline: 1 }
},
function(err, results) {
logger.log(results);
}
);
Deux questions:
1) Au fond, mes réduire la fonction est ignorée. Peu importe ce que je mets dedans, la sortie reste juste le résultat de ma fonction de carte (pas de 'test', dans ce cas). Des idées?
2) J'obtiens une erreur sauf si un index est défini sur le champ utilisé pour le tri (dans ce cas - le champ de compte). Je comprends que c'est à prévoir. Il semble inefficace car sûrement le bon index serait (_id, count) et non (count), car en théorie le _id devrait être utilisé en premier (pour la requête), et seulement alors le tri devrait être appliqué aux résultats applicables. Est-ce que j'ai râté quelque chose? MongoDB est-il inefficace? Est-ce un bug?
Merci! :)
Comment êtes-vous que exécutaient map/reduce? Pourriez-vous coller la commande? –
Ce qui précède est mon code complet dans node.js, en utilisant node-mongodb-native (qui est le code client officiel supporté par 10gen). node-mongodb-native exécute la commande pour vous lorsque vous appelez mapReduce pour une collection. Le code dans la bibliothèque commence par "Collection.prototype.mapReduce =" à: https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js –
Je reçois le résultats dans le rappel, c'est juste qu'il semble que la fonction de réduction est ignorée ... –