2011-07-28 7 views
3

J'utilise mongoose avec nodejs. J'utilise mapReduce pour récupérer des données groupées par un champ. Donc tout ce qu'il me donne en tant que collection est la clé avec le champ de regroupement seulement à partir de chaque ligne de la base de données. J'ai besoin de récupérer tous les champs de la base de données regroupés par domaine et triés sur la base d'un autre champ.eg: J'ai une base de données ayant des détails sur les lieux et les tarifs pour voyager à ces endroits et quelques autres champs aussi Maintenant, j'ai besoin d'aller chercher les données de telle sorte que j'obtiens les données groupées sur la base des places triées par le prix pour elles. MapReduce m'aide à l'obtenir, mais je ne peux pas obtenir les autres champs.en sélectionnant tous les champs d'affilée en utilisant mapReduce

Existe-t-il un moyen d'obtenir tous les champs à l'aide de la carte réduire, plutôt que de simplement obtenir les deux champs comme mentionné dans l'exemple ci-dessus ??

+1

Map/Reduce est une méthode d'agrégation de données. Quand vous dites * "Je ne peux pas obtenir les autres champs" *, je suis confus. Map/Reduce ne renvoie que les champs "group by" et les champs "aggregated". Quels champs vous manquent? Peut-être qu'il existe un autre outil approprié, pouvez-vous donner un exemple de ce que vous voulez? –

Répondre

0

Je dois admettre que je ne suis pas sûr de comprendre complètement ce que vous demandez. Mais peut-être l'une des pensées suivantes vous aide:

soit) lorsque vous itérer sur vos résultats MapReduce, vous pourriez chercher des documents complets de MongoDB pour chaque résultat. Cela vous donnerait accès à tous les champs de chaque document pour le coût d'un certain trafic réseau.

ou) La valeur que vous envoyez dans emit (clé, valeur) peut être un objet. Ainsi vous pouvez construire un objet de valeur qui contient tous vos champs désirés. Veillez simplement à utiliser exactement la même structure d'objet pour la valeur de retour de votre méthode reduce. J'essaie d'illustrer avec un exemple (non testé)

map = function() { 
    emit(this.place, 
     { 
      'field1': this.field1, 
      'field2': this.field2, 
      'count' : 1 
     }); 
} 

reduce = function(key, values) { 
    var result = { 
     'field1': values[0].field1, 
     'field2': values[0].field2, 
     'count' : 0 }; 

    for (v in values) { 
     result.count += values[v].count; 
    } 

    return obj; 
} 
+0

return obj? quel obj? – Sekai

Questions connexes