2010-09-06 4 views
0

J'ai trois types de document MainCategory, Category, SubCategory ... ont chacun un parentid qui se rapporte à l'id de leur document parent. Donc je veux mettre en place une vue afin que je puisse obtenir une liste de sous-catégories qui se trouvent sous la MainCategory (de préférence en utilisant simplement une fonction de carte) ... Je n'ai pas trouvé un moyen d'organiser la vue de cette façon est possible.Vues CouchDB - Join multiple ... Peut-il être fait?

J'ai actuellement mis en place une vue qui obtient la sortie suivante -

{"total_rows":16,"offset":0,"rows":[ 
{"id":"11098","key":["22056",0,"11098"],"value":"MainCat...."}, 
{"id":"11098","key":["22056",1,"11098"],"value":"Cat...."}, 
{"id":"33610","key":["22056",2,"null"],"value":"SubCat...."}, 
{"id":"33989","key":["22056",2,"null"],"value":"SubCat...."}, 
{"id":"11810","key":["22245",0,"11810"],"value":"MainCat...."}, 
{"id":"11810","key":["22245",1,"11810"],"value":"Cat...."}, 
{"id":"33106","key":["22245",2,"null"],"value":"SubCat...."}, 
{"id":"33321","key":["22245",2,"null"],"value":"SubCat...."}, 
{"id":"11098","key":["22479",0,"11098"],"value":"MainCat...."}, 
{"id":"11098","key":["22479",1,"11098"],"value":"Cat...."}, 
{"id":"11810","key":["22945",0,"11810"],"value":"MainCat...."}, 
{"id":"11810","key":["22945",1,"11810"],"value":"Cat...."}, 
{"id":"33123","key":["22945",2,"null"],"value":"SubCat...."}, 
{"id":"33453","key":["22945",2,"null"],"value":"SubCat...."}, 
{"id":"33667","key":["22945",2,"null"],"value":"SubCat...."}, 
{"id":"33987","key":["22945",2,"null"],"value":"SubCat...."} 
]} 

Quels paramètres QueryString devrais-je utiliser pour obtenir disent que les lignes qui ont une clé qui commence par [ « 22945 » .... Quand tout ce que j'ai (au moment de la requête) est l'id "11810" (au moment de la requête, je n'ai pas la connaissance de l'id "22945").

Si cela est logique.

Merci

Répondre

1

La façon dont vous stockez vos catégories semble être suboptimale pour la requête que vous essayez d'effectuer là-dessus.

MongoDB.org a une page sur various strategies to implement tree-structures (ils devraient s'appliquer à Couch et à d'autres doc dbs aussi) - vous devriez considérer Array of Ancestors, où vous stockez toujours le chemin complet vers votre noeud. Cela rend la mise à jour/déplacement des catégories plus difficile, mais l'interrogation est facile et rapide.

+0

Marcel Merci pour votre contribution. J'ai suivi votre conseil et suis parti avec le "Array of Ancestors" ... Ça marche très bien. – dworrad

+0

J'ai également créé une fonction de liste pour cracher les vues à plat dans une structure d'arbre qui fonctionne également bien. – dworrad