Document Mapping in CouchDB-Python

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hi,
ich möchte ein bestimmtes Dokument (Document mapping) aus der Datenbank laden. Dazu habe ich ein Objekt erstellt. Die einzige Möglichkeit, dieses Dokument zu laden ist offensichtlich mit document.load(db, document.id)

Ich brauche also die ID. Wenn ich die automatisch generierte ID verwenden möchte muss ich also zunächst mit einem View zum Beispiel nach dem gewünschten Namen suchen, die ID ermitteln und dann kann ich das Dokument laden. Die (einzige) andere Möglichkeit wäre, den Namen als ID zu verwenden.

Sehe ich das richtig? Oder gibt es noch andere Möglichkeiten?
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ohne ID kommst du an kein Dokument in CouchDB, jedenfalls wüsste ich nicht, wie.

Gruß, noisefloor
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Na sicher, über Views. Man kann auch in Dokumenten Views benutzen (ViewField), aber so wie es aussieht nur temporäre und damit langsame Views. Ich habe zumindest noch nicht herausgefunden, wie man gespeicherte Views mit Dokumenten nutzen kann.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ja klar. Wobei du ja dann über alle Dokumente iterierst (bzw. der View macht das), und du bekommst dann die ID so.

Views in Dokumenten habe ich noch nichg benutzt bzw. ich meine, ich hätte das auch noch nie gesehen. Da muss ich mal ins schlaue CouchDB Buch schauen, solange ich es noch habe. :-)

Gruß, noisefloor
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Wie gesagt, bisher konnte ich nur temporäre Views für Dokumente finden.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Drache
User
Beiträge: 51
Registriert: Montag 29. November 2010, 21:51
Wohnort: Berlin
Kontaktdaten:

Hallo burli,

hast du die temporären views mal gespeichert ?
Mal mit startkey und endkey experimentiert (gegebenfalls auch key).

Schreib doch mal ein mini Programm für dein Problem, vielleicht kann ich dir helfen.

Drache
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@burli: Ich habe nochmal über den Problem nachgedacht. Du brauchst die ID. Punkt. Wie du dran kommst, ist was anderes. Die ID ist in CouchDB das einzige fixe und einmalige Merkmale. Der Rest ist bekanntlich schemalos. Auch wenn du darüber prinzipiell weitere einmalige Merkmale erstellen könntest.

Gruß, noisefloor
Zuletzt geändert von noisefloor am Dienstag 6. Dezember 2011, 07:39, insgesamt 1-mal geändert.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Ich verwende jetzt einfach den Usernamen als ID. Der ist eindeutig und damit funktioniert es.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Ich habe gerade festgestellt, dass man keine Funktion in ein ViewField eintragen muss

Code: Alles auswählen

class Content(Document):
    doc_type = 'content'
    
    title = TextField()
    content = TextField()
    by_title = ViewField('content', ''' ''')    

content_by_title = ViewDefinition('content', 'by_title', '''
    function(doc) {
        if (doc.doc_type == 'content'){
        emit(doc.title, doc);
        }
    }''')

couch_manager.add_viewdef((content_by_title))
Man kann eine ViewDefinition permanent speichern und anschließend trotzdem mit Content.by_title() darauf zugreifen.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Antworten