使用couchdb-python进行多个CouchDB文档获取

dno*_*len 12 python couchdb

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

Mat*_*all 22

最简单的方法是将include_docs = True arg传递给Database.view.结果的每一行都包含doc.例如

>>> 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]
Run Code Online (Sandbox Code Playgroud)

请注意,如果文档不存在,则行的doc将为None.

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

  • 没错,但是在减少之后,文档没有任何意义.减少将来自多个文档(地图的发射(键,值)对)的项目组合成单个结果.因此,reduce行由许多文档组成,并且aa减少行的doc的想法是没有意义的.当然,您可以通过传递reduce = False关键字arg跳过视图的reduce,并且可以与include_docs = True结合使用就好了.但这不再是减少; 只有一张地图. (2认同)

dno*_*len -7

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']
Run Code Online (Sandbox Code Playgroud)

  • -1:此答案是在提出问题的同时发布的,并且在该解决方案被标记为已接受之前发布的更符合 API 的答案被接受。 (3认同)