【发布时间】:2009-10-28 20:52:25
【问题描述】:
如何从 CouchDB 获取多个文档,尤其是使用 couchdb-python?
【问题讨论】:
如何从 CouchDB 获取多个文档,尤其是使用 couchdb-python?
【问题讨论】:
最简单的方法是将 include_docs=True arg 传递给 Database.view。结果的每一行都将包含文档。例如
>>> 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]
请注意,如果文档不存在,则行的 doc 将为 None。
这适用于任何视图 - 只需提供适合该视图的键列表。
【讨论】:
这是正确的方法:
import couchdb
server = couchdb.Server("http://localhost:5984")
db = server["dbname"]
results = db.view("_all_docs", keys=["key1", "key2"])
【讨论】:
__repr__ 代码中有一个错误的行结果,这是真的,但你可以只做[ row for row in db.view('_all_docs', keys=["key1", "key2"]).rows if 'value' in row ] 来获取存在的行.
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']
【讨论】: