J'ai une question pour couchdb views/map-reduce.CouchDB View - Filtre multiple
Disons, nous avons une base de données avec l'hôtel-documents comme les suivants:
[{
_id: "1",
name: "Hotel A",
type: "hotel",
stars: 3,
flags: ["family-friendly","green-hotel","sport"],
hotelType: "premium",
food: ["breakfast","lunch"]
}, {
_id: "2",
name: "Hotel B",
type: "hotel",
stars: 5,
flags: ["family-friendly","pet-friendly"],
hotelType: "budget",
food: ["breakfast","lunch","dinner"]
}]
Pour trouver tous les hôtels avec 3 étoiles, la vue suivante s'adaptera:
function(doc) {
emit([doc.stars, doc.name]);
}
Si je startkey = [3], tout va bien.
Mais comment est-il possible de faire une vue avec plusieurs filtres?
Par exemple - Tous les hôtels:
- avec 3 étoiles et les drapeaux « la famille » et « animaux de compagnie » et avec Type d'hôtel « budget »?
- avec hotelType "premium" et nourriture "petit déjeuner" ou "déjeuner"?
- etc.
Toutes les idées?
EDIT: J'ai maintenant décidé d'utiliser le bon vieux mysql. CouchDB a été une expérience agréable pour moi, mais il y a trop de problèmes si vous avez besoin de plus de données qu'un seul document :(
Merci pour vos commentaires. Je sais que je peux émettre plus d'une fois et que je peux utiliser des tableaux comme clés. fonction \t (doc) {// \t \t par nom \t \t Emit ([1, doc.prénom]); \t \t \t \t // by Type d'hôtel \t \t emit ([2, doc.hotelType]); \t \t \t \t // par des drapeaux \t \t for (var i in doc.flags) { \t \t \t emit ([3, doc.flags [i]]); \t \t} \t \t // par des étoiles et un seul drapeau (s) \t \t for (var i dans doc.flags) { \t \t \t Emit ([4, doc doc.flags [i].]); Mais comment puis-je rechercher par exemple "par étoiles et PLUS puis UN drapeaux"? y-a-t'il une solution? – bernhardh
Ici dans un format lisible: http://pastebin.com/n8rsp87r – bernhardh