使用CouchDB python获取多个CouchDB文档

使用CouchDB python获取多个CouchDB文档,python,couchdb,Python,Couchdb,如何从CouchDB获取多个文档,特别是使用CouchDB python?这是正确的方法: 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, idstrin

如何从CouchDB获取多个文档,特别是使用CouchDB python?

这是正确的方法:

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']
import couchdb

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

最简单的方法是将include\u docs=True参数传递给Database.view。结果的每一行都将包含文档。e、 g

>>> 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]
db=couchdb.Database('http://localhost:5984/test') >>>行=db.view(“所有文档”,键=['docid1','docid2','missing'],include\u docs=True) >>>docs=[row.doc代表行中的行] >>>文件 [无] 请注意,如果某行的文档不存在,则该行的文档将为“无”


这适用于任何视图-只需提供适合该视图的键列表。

只有在您不需要对结果进行细粒度控制时,这才是正确的。我的方法允许您从所有不存在的文档中请求密钥,并且您将为不存在的密钥返回一个空占位符。如果您尝试使用您的方法执行此操作,则在迭代结果时会出现异常。为什么要做这样的事?快速手动连接。您有x个文档,您想加入来自其他文档的数据。@dnolen:事实上,这不是真的。。。行结果的
\uuu repr\uuuu
代码中有一个错误,这是真的,但您可以只执行
[db.view中的行对行(“\u all_docs',keys=[“key1”,“key2”)。行如果行中的“value”
来获取存在的行。是的,但是文档在reduce之后没有任何意义。reduce将来自多个文档(映射的发出(键、值)对)的项组合到一个结果中。因此,一个reduce行由许多文档组成,而reduce行的doc的想法是毫无意义的。当然,您可以通过传递reduce=False关键字arg跳过视图的reduce,该关键字可以与include\u docs=True组合使用。但这不再是一个减少;只有一张地图。-1:这个答案是在提出问题的同时发布的,在这个解决方案被标记为已接受之前发布的更符合API的答案被接受。