J'ai une carte à réduire comme ceci:carte MongoDB réduire la production de différents résultat à db.collection.find()
Carte:
function() {
emit(this.username, {sent:this.sent, received:this.received});
}
réduire:
function(key, values) {
var result = {sent: 0, received: 0, entries:0};
values.forEach(function (value) {
result.sent += value.sent;
result.received += value.received;
result.entries += 1;
});
return result;
}
J'ai été surveiller la quantité d'entrées traitées dans la carte de résultat, comme vous pouvez le voir. J'ai constaté que je reçois beaucoup moins d'enregistrements consultés que je ne le devrais.
Pour mon jeu de données particulier, la sortie est comme ceci:
[{u'_id ': u'1743', u'value ': {u'received': 1.406.545,0, u'sent ': 26251138.0, u'entries': 316,0}}]
Comme je suis en la carte réduire avec une option de requête, en spécifiant un nom d'utilisateur et une plage de dates.
Si j'effectue la même requête en utilisant db.collection.find() comme suit, le nombre est différent:
> db.entire_database.find({username: '1743', time : { $lte: ISODate('2011-08-12 12:40:00'), $gte: ISODate('2011-08-12 08:40:00') }}).count()
1915
La carte complète réduire requête est la suivante:
db.entire_database.mapReduce(m, r, {out: 'myoutput', query: { username: '1743', time : { $lte: ISODate('2011-08-12 12:40:00'), $gte: ISODate('2011-08-12 08:40:00') } } })
Donc, fondamentalement, , Je ne sais pas pourquoi le compte est si radicalement différent? Pourquoi la find() me donne-t-elle 1915, mais la carte est réduite à 316?
Bien sûr! Merci tas Russell. –
Pas de problème! Heureux de vous aider. – Russell