2009-10-28 14 views

Odpowiedz

-5
import couchdb 
import simplejson as json 

resource = couchdb.client.Resource(None, 'http://localhost:5984/dbname/_all_docs') 
params = {"include_docs":True} 
content = json.dumps({"keys":[idstring1, idstring2, ...]}) 
headers = {"Content-Type":"application/json"} 
resource.post(headers=headers, content=content, **params) 
resource.post(headers=headers, content=content, **params)[1]['rows'] 
+3

-1: Ta odpowiedź została wysłana w tym samym czasie, gdy zadano pytanie, i została zaakceptowana na podstawie bardziej zgodnej z API odpowiedzi, która została wysłana, zanim to rozwiązanie zostało oznaczone jako zaakceptowane. –

4

To jest właściwa droga:

import couchdb 

server = couchdb.Server("http://localhost:5984") 
db = server["dbname"] 
results = db.view("_all_docs", keys=["key1", "key2"]) 
+0

Jest to prawdą tylko wtedy, gdy nie masz dokładnej kontroli nad wynikami. Moja metoda pozwala prosić o klucze z _all_docs, które nie istnieją, a otrzymasz z powrotem pusty symbol zastępczy dla nieistniejących kluczy. Jeśli spróbujesz użyć tej metody, otrzymasz wyjątek podczas powtarzania wyników. Dlaczego chcesz zrobić coś takiego? Szybkie ręczne połączenia. Masz x dokumentów i chcesz dołączyć do danych z innych dokumentów. – dnolen

+0

@dnolen: Właściwie to nie jest prawda ... jest błąd w kodzie '__repr____ dla wyniku wiersza, to prawda, ale możesz po prostu zrobić' [wiersz dla wiersza w db.view ('_ all_docs', klucze = ["klucz1", "klucz2"]). wiersze, jeśli "wartość" w wierszu] ', aby uzyskać wiersze, które istnieją. –

21

Najprostszym sposobem jest zdać include_docs = true argumentu do Database.view. Każdy wiersz wyników będzie zawierał dokument. na przykład

>>> db = couchdb.Database('http://localhost:5984/test') 
>>> rows = db.view('_all_docs', keys=['docid1', 'docid2', 'missing'], include_docs=True) 
>>> docs = [row.doc for row in rows] 
>>> docs 
[<Document 'docid1'@'...' {}>, <Document 'docid2'@'...' {}>, None] 

Należy zauważyć, że dokument wiersza będzie Brak, jeśli dokument nie istnieje.

Działa to z dowolnym widokiem - wystarczy podać listę kluczy odpowiednich do widoku.

+0

Nie sądzę, że to działa z redukcją widoków niestety. – dnolen

+2

To prawda, ale dokumenty nie mają żadnego sensu po zmniejszeniu. Funkcja redukcji łączy elementy z wielu dokumentów (pary emitowane (pary kluczy, wartości) w pojedynczy wynik. W związku z tym wiersz redukcji składa się z wielu dokumentów, a pomysł dokumentu zmniejszania wiersza jest bez znaczenia. Oczywiście można pominąć redukcję widoku, przekazując słowo kluczowe reduce = False słów kluczowych, które można łączyć z include_docs = Prawda, wszystko w porządku. Ale to już nie jest redukcja; tylko mapa. –

Powiązane problemy