2010-12-22 8 views
2

Ich habe es wahrscheinlich gerade in der offensiven doco verpasst, aber ich kann nicht herausfinden, wie ein Dokument in meinem db mit CouchRest existiert.CouchRest - Prüft, ob die Dokument-ID existiert

Ich versuchte db.get(id), aber das wirft eine 404 in meiner Anwendung, und es scheint irgendwie albern zu versuchen/um mich herum zu fangen.

Gibt es eine einfache Möglichkeit zu sagen "Wenn diese ID existiert -> update, else -> create"?

Antwort

2

Schnelle Antwort - nein.

Grundsätzlich ist es nicht möglich, auf der Couch zu speichern oder zu aktualisieren, da das Aktualisieren eines vorhandenen Dokuments die Revisionsnummer erfordert und Sie es zuerst abrufen müssen. Sie müssen hier mit dem 404 umgehen.

hilfreicher zu sein, würde ich wahrscheinlich eine Methode wie folgt verwenden:

def save_or_create(db, doc) 
    begin 
    rev = db.get(doc['_id']) 
    doc['_rev'] = rev 
    db.save_doc(doc) 
    rescue RestClient::ResourceNotFound => nfe 
    db.save_doc(doc) 
    end 
end 

Ungeprüfte, sollte aber in der Nähe sein.

0

Vollarbeitsfunktion basierend auf vorherigen Stacker Kommentar (i hinzufügen [ '_rev'] abfragen):

def save_or_create(db, doc) 
    begin 
     rev = db.get(doc['_id'])['_rev'] 
     doc['_rev'] = rev 
     db.save_doc(doc) 
    rescue RestClient::ResourceNotFound => nfe 
     db.save_doc(doc) 
    end 
end 
2

Ich schlage vor, mit couchdb update API (> = 0.10), wenn Ihr Problem zu schaffen-oder- ist aktualisieren. Gestalten Sie es wie so:

POST dann $DB/_design/$DESIGN_NAME/_update/in_place oder PUT zu $DB/_design/$DESIGN_NAME/_update/in_place/$DOC_ID. Es ist ein einfacher Fall mit blankem Metal-RestClient, auf dem CouchRest gebaut wurde.

Verwandte Themen