2012-03-30 7 views
1

Ich habe eine Seite, wo ich Dokumente habe, die etwa 1 MB groß sind. Um jegliche Art von konzeptionellen Joins zu vermeiden, habe ich alle zugehörigen Daten in einem einzigen Dokument zusammengefasst.Nur einige Attribute eines Dokuments in couchdb holen

Jetzt muss ich oft nur ein oder zwei Attribute eines Dokuments abrufen. Jedes Dokument hat mehr als 10 Attribute, von denen viele ziemlich groß sind. Ich kann nicht weiter Ansichten für jede einzelne Kombination der Attribute schreiben.

Wie soll ich das machen? Die einzige Möglichkeit, die ich sehe, ist das Erstellen von Ansichten im laufenden Betrieb und die Verwendung dieser Ansichten. ODER gibt es eine bessere Methode?

Antwort

2

http://wiki.apache.org/couchdb/Document_Update_Handlers

Während es scheint seltsam, eine Update-Funktion aufrufen, Couch ermöglicht es Ihnen, ohne aktualisieren es Informationen aus dem Dokument zurückzukehren. Siehe das XML-Beispiel.

Hier könnte ein Beispiel sein, das Sie verlängern könnte:

hinzufügen jsonpath zu Ihrem DDOC, (https://github.com/s3u/JSONPath)

 
function(doc, req) { 
    var jsonpath = require('jsonpath'); 
    var path = req.query.path; 
    var target = jsonpath(doc, path); 
    var json = JSON.stringify(target); 
    var resp = { 'headers' : { 'Content-Type' : 'application/json' }, 'body' : json }; 
    return [doc, resp]; 
} 
+1

Die oben noch gilt, aber eigentlich würde ich empfehlen, stattdessen eine Show-Funktion. Es ist fast genau der gleiche Code. Nur mehr der richtige Weg. –

+0

Und vergessen Sie nicht über Listenfunktionen: Wenn Sie nur ein paar vordefinierte Attribute abfragen, aber beliebige Kombinationen von Attributen _wiederholen_ müssen, ist eine Listenfunktion, die ein JSON-Objekt zurückgibt, das nur die von Abfrageparametern angegebenen Teile von Dokumenten enthält Sie wollen. – ebohlman

+0

Ich habe ein bisschen eine Bibliothek erstellt, um das mehr Spaß zu machen. siehe https://github.com/ryanramage/kanso-jsonselect –

Verwandte Themen