MongoDB carte de réduire avec la requête
J'ai eu un gros MongoDB que j'ai besoin d'extraire des statistiques à partir et je le fais d'acheter l'exécution d'une Carte de Réduire la requête.
Le problème est maintenant que j'en ai besoin pour affiner la requête à utiliser, par exemple, statut: "rédigé" au lieu d'utiliser l'ensemble de la collection.
C'est ma Map/reduce code (j'utilise Codeigniter):
J'ai essayé de suivre la dernière étape dans cette requête, mais je ne peux pas obtenir des résultats donc je pense que j'ai ajouter la syntaxe de mal: http://cookbook.mongodb.org/patterns/unique_items_map_reduce/.
$map = new MongoCode ("function() {
day = Date.UTC(this.created_at.getFullYear(), this.created_at.getMonth(), this.created_at.getDate());
emit ({day: day, _id: this._id}, {created_at: this.created_at, count: 1});
}");
$reduce = new MongoCode ("function( key , values ) {
var count = 0;
values.forEach (function(v) {
count += v['count'];
});
return {count: count};
}");
$outer = $this->cimongo->command (array (
"mapreduce" => "documents",
"map" => $map,
"reduce" => $reduce,
"out" => "stats_results"
));
$map = new MongoCode ("function() {
emit(this['_id']['day'], {count: 1});
}");
$reduce = new MongoCode ("function( key , values ) {
var count = 0;
values.forEach (function(v) {
count += v['count'];
});
return {count: count};
}");
$outer = $this->cimongo->command (array (
"mapreduce" => "stats_results",
"map" => $map,
"reduce" => $reduce,
"out" => "stats_results_unique"
));
- Qu'entendez-vous par "utiliser le statut "pensées"? Voulez-vous éviter de cartographie de l'intégralité de la table, ou suffit-il seulement émettant des touches avec ce statut? Je suppose que ce que vous voulez, c'est conditionnellement émettent le résultat basé sur le champ de statut.
Vous devez vous connecter pour publier un commentaire.
Deux choses au sujet de votre question:
1) L'exemple dans le livre de cuisine pourrait être un peu trop complexe pour ce que vous essayez de faire. Ici, c'est un plus simple:
Compte tenu de la structure d'un document qui ressemble à ceci:
Voici quelques exemples de code JavaScript à exécuter un travail map/reduce qui va compter le nombre de visites par URL distinctes.
2) Si vous souhaitez exécuter la Carte/fonction de réduction sur un sous-ensemble de la "pages vues" collection, vous pouvez spécifier une requête à l'appel à 'mapReduce ()" afin de limiter le nombre de documents que l' 'map () la fonction fonctionnera sur:
Noter que si vous n'êtes pas à l'aide de JavaScript, vous aurez à traduire ces appels dans n'importe quel langage de programmation que vous utilisez.
3) Voici un exemple d'appel de la Carte/fonction de réduction avec une condition de requête à l'aide de PHP:
4) Pour plus d'informations sur Map/reduce, voir les références suivantes:
À l'aide de Map/reduce en PHP: http://us.php.net/manual/en/mongodb.command.php
--William