我正在使用pythoncouchdb库使用连续提要来监听数据库中的更改。我想应用一个过滤器,它只给那些键read
等于true
的文档。在
得到正常的HTTP请求结果。但我不知道如何通过couchdb-python
库来实现这一点。下面是我编写的自定义过滤器:
def read_true_filter():
return """function(doc, req) {
if(doc.read === true) {
return true;
}
return false;
}
"""
以下是我如何倾听这些变化:
^{pr2}$但这给了我一个错误:
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中使用该过滤器不是一个好主意。)
有人能告诉我我做错了什么/该怎么做吗?在
我想出来了。我在数据库中制作了一个设计文档,我想在其中筛选内容,例如:
这里}是过滤器的名称(在本例中是
^{pr2}$read_validator
是设计文档,它包含返回docs
的过滤器,它的read
属性设置为true
。在couchdb python客户机中,在获取连续提要时,我将过滤器资源路径作为字符串design_document_name/filter_name
,其中design_document
是在数据库中创建的设计文档的名称(在本例中是read_validator
),而{read_only_true
)。所以,联系是这样的:这里的
db_changes
将是一个连续的提要生成器,通过该生成器,所有的文档都可以通过迭代获取,这些文档的read
键等于true
。在相关问题 更多 >
编程相关推荐