我正在使用 python-couchdb 库通过连续馈送来监听数据库中的变化。我想应用一个过滤器,它只给我那些键read
等于true
.
通过正常的 HTTP GET 请求,我得到了想要的结果。但我无法弄清楚如何通过couchdb-python
图书馆做到这一点。这是我编写的自定义过滤器:
def read_true_filter():
return """function(doc, req) {
if(doc.read === true) {
return true;
}
return false;
}
"""
以下是我尝试聆听更改的方式:
db_changes = db.changes(
feed='continuous',
include_docs=True,
heartbeat=1000,
since=last_seq_id,
filter=read_true_filter
)
但这给了我错误:
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 中使用该过滤器并不是一个好主意。)
有人可以告诉我我做错了什么/如何去做吗?