2016-10-21 11 views
0

J'essaie de renvoyer un champ de chaque objet de ma collection sous forme de tableau en utilisant la fonction mapReduce. Ce sont mes documents dans une collection.Fonction MapReduce MongoDB NodeJs

{ _id: '1', name: 'a' }, 
{ _id: '2', name: 'b' }, 
{ _id: '4', name: 'c' }, 
{ _id: '5', name: 'd' }, 
{ _id: '6', name: 'e' }, 
{ _id: '7', name: 'f' } 

Maintenant, je veux aboutir à cette forme [ 'a', 'b', 'C', 'D', 'E', 'f']. Comment je peux y arriver, j'ai essayé mapReduce mais je n'ai pas pu obtenir le résultat de cette façon.

C'est mon code

collection.mapReduce(function EachBranch() { 
     emit(this.name, this.value); 
     }, function (key, values) { 
     },{ out: { inline: 1 } }); 

Répondre

1

Vous devez itérer sur les valeurs dans le réducteur et transformer les résultats sous forme souhaitée.

Exemple: Essayez dans mongo shell

db.collection.mapReduce(
    function() { 
    emit(1, this.name) 
    }, 
    function(k,v){ 
    var result = {}; 
    result.names = v; 
    return result; 
    }, 
    {out: {inline:1}} 
).results[0].value.names; 

Sur la base de vos documents d'entrée d'échantillons, vous obtiendrez comme sortie:

[ "a", "b", "c", "d", "e", "f" ] 

Mise à jour: solution Node.js:

collection.mapReduce(
    function() { 
     emit(1, this.name) 
    }, 
    function (k, v) { 
     var result = {}; 
     result.names = v; 
     return result; 
    }, 
    { out: { inline: 1 } }, 
    function (err, result) { 
     assert.equal(null, err); 

     if (result) { 
      console.log(result[0].value.names); 
     } 
     db.close(); 
    } 
); 

Note: Je ne gère aucune erreur alors s'il vous plaît faire un codage défensif.

+0

Je reçois "Impossible de lire la propriété '0' de undefined" –

+0

Voir mon ** NOTE ** ci-dessus. J'ai clairement mentionné que je ne fais aucun contrôle d'erreur. S'il n'y a pas de résultat, vous obtiendrez une erreur. Je laisse le traitement des erreurs sur vous. Veuillez noter que SO n'est pas un service de codage. Nous sommes là pour aider, mais pas pour résoudre des tâches ou faire du travail. – Saleem

+0

Je comprends, le problème est dans votre code. Le résultat est indéfini –