【问题标题】:Multiple CouchDB Document fetch with couchdb-python使用 couchdb-python 获取多个 CouchDB 文档
【发布时间】:2009-10-28 20:52:25
【问题描述】:

如何从 CouchDB 获取多个文档,尤其是使用 couchdb-python?

【问题讨论】:

    标签: python couchdb


    【解决方案1】:

    最简单的方法是将 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。

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

    【讨论】:

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

    这是正确的方法:

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

    【讨论】:

    • 只有当您没有对结果进行细粒度控制时,这才是正确的。我的方法允许您从 _all_docs 中请求不存在的密钥,并且您会为不存在的密钥返回一个空占位符。如果您使用您的方法尝试此操作,则在迭代结果时会出现异常。为什么会想做这样的事情?快速手动连接。您有 x 个文档,并且想要加入来自其他文档的数据。
    • @dnolen:实际上,这不是真的......__repr__ 代码中有一个错误的行结果,这是真的,但你可以只做[ row for row in db.view('_all_docs', keys=["key1", "key2"]).rows if 'value' in row ] 来获取存在的行.
    【解决方案3】:
    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']
    

    【讨论】:

    • -1:此答案是在提出问题的同时发布的,并且在此解决方案被标记为已接受之前发布的更符合 API 的答案已被接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    相关资源
    最近更新 更多