2009-10-28 15 views

Respuesta

-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: esta respuesta se publicó al mismo tiempo que se formuló la pregunta, y se aceptó una respuesta más conforme a la API que se publicó antes de que esta solución se marcara como aceptada. –

4

Ésta es la manera correcta:

import couchdb 

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

Esto es cierto solo si no se tiene un control preciso de los resultados. Mi método te permite pedir claves de _todos_dos que no existen, y obtendrás un marcador de posición vacío para las claves que no existen. Si intenta esto con su método, obtendrá una excepción al repetir los resultados. ¿Por qué querría hacer algo como esto? Uniones manuales rápidas. Tiene x documentos y desea unir datos de otros documentos. – dnolen

+0

@dnolen: en realidad, eso no es verdad ... hay un error en el código '__repr__' para un resultado de fila, eso es cierto, pero puedes hacer' [row para row en db.view ('_ all_docs', claves = ["key1", "key2"]). rows si 'value' en la fila] 'para obtener las filas que existen. –

21

La manera más fácil es pasar un include_docs = True arg a Database.view. Cada fila de los resultados incluirá el documento. p.ej.

>>> 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] 

Tenga en cuenta que el documento de una fila será Ninguno si el documento no existe.

Esto funciona con cualquier vista; solo proporcione una lista de teclas adecuada para la vista.

+0

No creo que esto funcione con la reducción de puntos de vista, lamentablemente. – dnolen

+2

Cierto, pero los documentos no tienen ningún sentido después de una reducción de todos modos. Un reductor combina elementos de varios documentos (los pares emitidos (clave, valor) del mapa) en un solo resultado. Por lo tanto, una fila de reducción se compone de muchos documentos y la idea de un documento de una fila reducida no tiene sentido. Por supuesto, puede omitir la reducción de una vista al pasar una arg palabra clave reducir = Falso y que se puede combinar con include_docs = True simplemente bien. Pero eso ya no es una reducción; solo un mapa –

Cuestiones relacionadas