Pour l'émission de plus d'un élément de données dans une clé, vous aurez envie de lire sur les Complexes des Touches de http://wiki.apache.org/couchdb/View_collation Vous aurez plus de chances de finir emit () ing une clé qui est un tableau composé de la catégorie et de la balise. Par exemple...
function(doc) {
for(var i = 0; i < doc.tags.length; i++)
emit([doc.category, doc.tags[i]], doc);
}
Maintenant, quand vous interrogez ?key=["fun", "couchdb"]
vous aurez tous les éléments dans le plaisir de la catégorie étiqueté comme couchdb. Ou si vous voulez tous les éléments dans le plaisir de la catégorie, quelle que soit leur étiquette, alors vous pouvez faire une requête avec une gamme: ?startkey=["fun"]&endkey=["fun", {}]
rappelez-vous Juste, si votre article a plusieurs balises que vous aurez à plusieurs reprises dans les résultats (parce que vous émettez()'d la doc une fois par tag).
Pour passer à la deuxième étape de tri par note, la date et le titre que vous allez ajouter deux autres éléments de votre tableau: un entier et soit le classement, la date ou par titre. N'oubliez pas, vous pouvez émettre() plus d'une fois par carte de fonction. Un exemple de carte de fonction...
function(doc) {
for(var i = 0; i < doc.tags.length; i++)
{
emit([doc.category, doc.tags[i], 0, doc.ranking], doc);
emit([doc.category, doc.tags[i], 1, doc.title], doc);
emit([doc.category, doc.tags[i], 2, doc.date], doc);
}
}
Maintenant, votre clé de la structure: ["catégorie", "tag", 0 ... 2, rang/titre/date]
Vous êtes essentiellement en regroupant l'ensemble des classements au-dessous de 0, les titres de moins de 1, et les dates de moins de 2. Bien sûr, vous êtes la transmission d'un grand nombre de données, de sorte que vous pourrait interrompre chacun de ces groupements dans une vue séparée dans votre document de conception, ou de retourner uniquement le doc de _id la valeur (emit([ ...], doc._id);
).
Obtenir tout le plaisir de la catégorie avec la couchdb balise (par ordre croissant):
?startkey=["fun", "couchdb"]&endkey=["fun", "couchdb", {}, {}]
Obtenir tout le plaisir de la catégorie avec la couchdb tag (décroissant):
?startkey=["fun", "couchdb", {}, {}]&endkey=["fun", "couchdb"]&descending=true
Obtenez uniquement les classements dans le plaisir de la catégorie avec la couchdb balise (par ordre croissant):
?startkey=["fun", "couchdb", 0]&endkey=["fun", "couchdb", 0, {}]
Obtenez uniquement les classements dans le plaisir de la catégorie avec la couchdb tag (décroissant):
?startkey=["fun", "couchdb", 0, {}]&endkey=["fun", "couchdb", 0]&descending=true
J'espère que cette aide. Complexe touches de vraiment commencer à montrer comment puissant Map/reduce est à découper et couper en dés les données.
Des acclamations.