首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得python中的筛选更改

如何获得python中的筛选更改
EN

Stack Overflow用户
提问于 2017-01-06 10:24:31
回答 1查看 988关注 0票数 1

我使用python库来使用连续提要收听数据库中的更改。我想应用一个过滤器,它只给我提供一个键read等于true的文档。

对于正常的HTTP请求,我得到了所需的结果。但我无法通过couchdb-python库找到如何做到这一点。下面是我编写的一个自定义过滤器:

代码语言:javascript
复制
def read_true_filter():
    return """function(doc, req) {
            if(doc.read === true) {
                return true;
            }
            return false;
        }
        """

下面是我试着倾听这些变化的方式:

代码语言:javascript
复制
db_changes = db.changes(
    feed='continuous',
    include_docs=True,
    heartbeat=1000,
    since=last_seq_id,
    filter=read_true_filter
)

但这给了我一个错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "../src/couch_pull_pipeline.py", line 87, in <module>
    db_changes = db.changes(
  File "/Users/sanyam/venv/lib/python3.5/site-packages/couchdb/client.py", line 1027, in _changes
    _, _, data = self.resource.get('_changes', **opts)
  File "/Users/sanyam/venv/lib/python3.5/site-packages/couchdb/http.py", line 546, in get
    return self._request('GET', path, headers=headers, **params)
  File "/Users/sanyam/venv/lib/python3.5/site-packages/couchdb/http.py", line 581, in _request
    credentials=self.credentials)
  File "/Users/sanyam/venv/lib/python3.5/site-packages/couchdb/http.py", line 421, in request
    raise ServerError((status, error))
couchdb.http.ServerError: (400, ('bad_request', 'filter parameter must be of the form `designname/filtername`'))

在请求中添加designname很简单,但我无法找到使用couchdb客户端进行此操作的等价物。

是否可以使用python库,或者我应该使用简单的HTTP请求,或者更好的方法是在couchdb服务器本身上设置过滤器?(根据我到目前为止所读到的,由于性能原因,在couchdb中使用这个过滤器并不是个好主意。)

有人能给我指点我做错了什么/怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-07 13:04:38

我想出来了。我在数据库中创建了一个设计文档,在该文档中,我希望过滤以下内容:

代码语言:javascript
复制
{
   "_id": "_design/read_validator",
   "_rev": "1-bd5fb337899a0eaf485b2112b439cc30",
   "filters": {
       "read_only_true": "function(doc, req) {if(doc.read === true) {return true;}return false;}"
   }
}

这里,read_validator是一个设计文档,它包含要返回docs的过滤器,该过滤器将read属性设置为true。在couchdb客户机中,在获取连续提要时,我将过滤器资源路径作为字符串design_document_name/filter_name,其中design_document是在db中创建的设计文档的名称(在本例中是read_validator),filter_name是过滤器的名称(在本例中是read_only_true)。所以,连接是这样的:

代码语言:javascript
复制
db_changes = db.changes(
    feed='continuous',
    include_docs=True,
    heartbeat=1000,
    since=last_seq_id,
    filter="read_validator/read_only_true"
)

这里,db_changes将是一个连续的提要生成器,通过它可以通过迭代获取所有文档,其中的read键等于true

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41503606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档