Gegeben Ich habe folgende Produkte:CouchDB: Abfragen Many-To-Many "Beziehung"
{
"_id": "2666df80782596200fca49557d757870",
"_rev": "3-99382057f6c484526835f1042753ccf2",
"type": "product",
"name": "Shirt",
"hersteller": "oska",
"price": 11.15
}
{
"_id": "2666df80782596200fca49557d758e8c",
"_rev": "1-01cc88e69e5ff30f0d011fdf61fbedbc",
"type": "product",
"name": "Pullover",
"hersteller": "acme",
"price": 7.58
}
Und einen Auftrag
{
"_id": "2666df80782596200fca49557d758228",
"_rev": "2-0b4b3a8605893b60c962b8ae78f0b775",
"type": "order",
"orderDate": "01.01.2012",
"positions": [
"2666df80782596200fca49557d757870",
"2666df80782596200fca49557d758e8c"
]
}
ich alle Aufträge mit _id, bestelldatum und Summe abfragen möchten aller Positionen Preise. Wie gehe ich das an?
Beispiel:
[
{ "_id": "2666df80782596200fca49557d758228", "orderDate": "01.01.2012", "total": 18.73 }
]
Edit:
Dieses Beispiel aufgebaut ist, und ich weiß, dass eine Gesamtbestellung sollte nicht die Preise für historische Aufträge ändern Produkt ändern. Es ist ein schlechtes Beispiel für etwas, wo ein echter "Join" notwendig wäre. Stellen Sie sich vor, ich muss die Summen ändern, wenn sich der Preis eines Produkts ändert. Daher möchte ich das Summenfeld nicht einfach denormalisieren. Es ist möglich, die Summen in den Bestellungen zu "reparieren", wenn sich ein Produkt ändert. Wenn ich jedoch viele verschiedene Dokumententypen habe, die auf das Produkt verweisen, muss ich sie mit einer bestimmten Funktion nach Typ ändern. Seans Antwort brachte mich auf den Gedanken, dass ich denormalisierte Felder mit einem Changes-Listener reparieren könnte, aber ich brauche einen Listener für jedes Mal, wenn ein Doc-Typ mit einem anderen verwandt ist - klingt nach viel Arbeit.
Siehe http: // stackoverflow.com/questions/3033443/best-weg-zu-eins-zu-vielen-beitreten-in-couchdb –
Hey Ryan, danke für den Kommentar. Ich wusste das schon vorher, ich glaube, ich habe irgendeinen SO-Thread zum Beitritt gelesen :-) Der eine, den du verlinktest, handelt von "One-to-Many-Joins", und ich möchte "viele-zu-viele" beitreten. Ich weiß, dass ich? Include_docs = true in aktuellen Couchdb-Versionen, die effektiv die verwandten Produkte für eine Bestellung abrufen, aber ich kann nicht auf die Ergebnisse reduzieren, um die Summe zu berechnen. Ich sehe keinen Grund, warum reduzieren würde hier nicht funktionieren. –
OK, lesen http://stackoverflow.com/questions/3033443/best-way-to-do-one-to-many-join-in-couchdb wieder impliziert, es ist nicht eine "one-to-many beitreten" das ist besprochen. Ich denke, was ich vermisst habe, war die Show-Funktion hier. Ich verstehe nicht, warum ich noch nicht reduzieren kann :-) –