2017-07-19 5 views
0

Utilisation de Nano pour interroger une vue Couch dans NodeJS, pour compter les occurrences de balises dans tous les documents. Si je choisis réduire dans Fauxton sur la vue, il affiche correctement avec chaque nom de tag comme clé, et le nombre. Cependant, à partir de mon application Node, je reçois simplement 'Null' comme clé, et un total de tous les tags.Les touches ne sont pas renvoyées dans la fonction de réduction

Le nom du tag (plutôt que le _id) est stocké dans chaque document. Ceci est ma fonction de carte (en utilisant la _count réduire la fonction):

function (doc, meta) { 
    if(doc.tags) { 
    for(var i in doc.tags) { 
     emit(doc.tags[i],1); 
    } 
    } 
} 

Ceci est mon (Nano) code Node:

app.get('/listtags', function(req, res) { 
    couch.view('objects', 'tags-count', {reduce: true}, function(err, body) { 
     console.log(body); 
    }); 
}); 

Et il retourne:

{ rows: [ { key: null, value: 8 } ] } 

EDIT Ajout d'exemples de documents:

Tag:

{ 
"_id": "...", 
"_rev": "1-...", 
"type": "tag", 
"name": "petrol" 
} 

Doc contenant des tags:

{ 
"_id": "...", 
"_rev": "3-...", 
"type": "car", 
"title": "Audi", 
"desc": "description here", 
"tags": [ 
    "petrol", 
    "aircon", 
    "leather seats" 
] 
} 
+1

Pouvez-vous nous donner un exemple de l'une entrée de document? –

+0

added example docs – user4893295

+0

Essayez avec {reduce: true, group_level: true}. Si cela fonctionne, je posterai ceci comme réponse –

Répondre

0

Ceci est parce que vous devez spécifier l'option group_level ou l'option group=true.

par exemple:

app.get('/listtags', function(req, res) { 
    couch.view('objects', 'tags-count', {reduce: true, group: true}, function(err, body) { 
     console.log(body); 
    }); 
});