couchdb - CouchDB 过滤功能和连续馈送
问题描述
我有一个基于文档属性的过滤器功能过滤,例如“版本:A ”,它工作正常,直到在某个时间点有一个文档更新,当这个属性“版本:A ”被删除(或更新为“版本:B ” )。
此时我希望收到通知文档已更新,类似于文档被删除时的通知,但找不到有效的方法(没有侦听和处理所有文档更改)。
希望我只是遗漏了一些东西,这不是设计限制。
解决方案
虽然我的另一个答案是一种有效的方法,但我昨天遇到了同样的情况,并决定考虑使用 Mango 选择器来完成这项工作。我做了以下事情:
- 建立由查询选择器过滤的更改提要(请参阅 /db/_changes 的“_selector”过滤器)
- 执行查询(db/_find)并记录结果
- 建立第二个更改提要,仅在 (2) 中返回的文档中进行过滤(请参阅 /db/_changes 的“_doc_ids”过滤器)
(1) 处的提要让您知道新文档何时与您的查询匹配,以及更改前后与您的查询匹配的文档的编辑。
(2) 处的提要让您知道何时对先前与您的查询匹配的文档进行了更改,无论在更改后它是否与您的查询匹配。
这些提要的组合涵盖了所有情况,尽管有一些误报。在任一提要发生更改时,请拆除 (3) 处的更改提要并重做步骤 (2) 和 (3)。
现在,关于这种方法的一些注意事项:
- 这实际上仅适用于查询返回的文档数量很少的情况,因为如果在第二个提要中按 _id 进行过滤。
- 如果第一个更改提要中有大量更改,则必须注意确保正确建立第二个提要。
- 在某些情况下,两个提要中都会出现更改。最好避免两次反应。
- 如果预计更改会频繁发生,那么如果您的客户不需要处理每个更改通知,则使用去抖动或速率限制。
这种方法对我和我必须处理的案例都很有效。
参考:
推荐阅读
- chart.js - How to unregister a chart plugin?
- sql - 需要找出使用sql查询在字符串中使用'a'的次数
- react-native - NativeBase Tabs 函数 onChangeTab 导致应用程序冻结
- java - 在多个组件之间共享事务
- javascript - (/(%3C*|<)[^*]?script(%3E)[a-zA-Z0-9]*/gi, '') 此正则表达式不能单独在 IE 中用于删除 sting 中的脚本
- android - 应用程序被杀死时如何运行 Android Worker?
- python - 列表中的特定范围(python)
- javascript - 未能以 html 元素的形式接收 php 响应
- flutter - 如何从列表中删除特定项目?
- d3.js - 如何在d3中放置具有空投影的纬度和经度?