Ich bin auf der Suche nach einem CouchDB-Äquivalent zu "SQL Joins".Die beste Möglichkeit, One-to-Many "JOIN" in CouchDB zu machen
In meinem Beispiel gibt es CouchDB Dokumente, Listenelemente sind:
{ "type" : "el", "id" : "1", "content" : "first" }
{ "type" : "el", "id" : "2", "content" : "second" }
{ "type" : "el", "id" : "3", "content" : "third" }
Es ist ein Dokument, das die Liste definiert:
{ "type" : "list", "elements" : ["2","1"] , "id" : "abc123" }
Wie Sie das dritte Element wurde gelöscht sehen kann, ist es ist nicht mehr Teil der Liste. Also muss es nicht Teil des Ergebnisses sein. Jetzt möchte ich eine Ansicht, die die Inhaltselemente einschließlich der richtigen Reihenfolge zurückgibt.
könnte das Ergebnis sein:
{ "content" : ["second", "first"] }
In diesem Fall wird die Reihenfolge der Elemente bereits ist, wie es sein sollte. Ein weiteres mögliches Ergebnis:
{ "content" : [{"content" : "first", "order" : 2},{"content" : "second", "order" : 1}] }
Ich begann die Karte Funktion zu schreiben:
map = function (doc) {
if (doc.type === 'el') {
emit(doc.id, {"content" : doc.content}); //emit the id and the content
exit;
}
if (doc.type === 'list') {
for (var i=0, l=doc.elements.length; i<l; ++i){
emit(doc.elements[i], { "order" : i }); //emit the id and the order
}
}
}
Dies ist so weit wie ich bekommen kann. Kannst du meine Fehler korrigieren und eine Reduce-Funktion schreiben? Denken Sie daran, dass das dritte Dokument nicht Teil des Ergebnisses sein darf.
Natürlich können Sie auch eine andere Kartenfunktion schreiben. Die Struktur der Dokumente (ein definiertes Elementdokument und ein Eintragsdokument für jeden Eintrag) kann jedoch nicht geändert werden.
EDIT: Nicht Jason Smith Kommentar zu seiner Antwort verpassen, wo er beschreibt, wie diese kürzer zu tun.
Wort, das ist eine gründliche ein. Gute Arbeit jhs! –
Es ist irreführend lang. Eigentlich ist Schritt # 2 eine komplette Lösung, aber ja, ich habe detaillierte Hintergrundanforderungen und optionale Möglichkeiten, um Komfort auf der Client-Seite hinzuzufügen. – JasonSmith
Die CouchIO URL hat sich geändert, hier ist die neue für den gleichen Artikel: http://couchio.tumblr.com/post/446015664/whats-new-in-apache-couchdb-011-part-two – Bdoserror