假设我有一个存储日志消息的数据库。每条消息都包含优先级,日期和消息的信息。应用程序应该能够查询按日期排序的可能受优先级约束的日志消息。因此,我可以创建一个名为by_priority
的视图,其密钥为[doc.priority, doc.date]
,然后我可以使用以下请求轻松查询优先级值至少为$X
的所有邮件:
GET $database/_design/$design/_view/by-priority?startkey=[$X]&endkey=[{}]
现在我想扩展应用程序,以便在它们到达时自动获取具有给定条件的新消息。我可以通过添加名为min_priority
的过滤器来执行此操作,该过滤器选择优先级至少为$X
的消息(与prio
查询参数一起传递)并发出以下请求:
GET $database/_changes?filter=$design/max_priority&prio=$X
但这意味着我必须在服务器(通过过滤器功能)以及客户端上复制选择逻辑(最小值,最大值,优先级范围,优先级和日期) (通过构建startkey
和endkey
)的值。
是否真的有必要两次实施相同的逻辑?
或者至少是否可以在视图和过滤器功能之间共享为文档生成键值对的代码?这样,我可以为每个调用视图函数并接受startkey
和endkey
参数的视图设置通用过滤器函数。我还需要一种方法来访问CouchDB的算法来比较密钥。我可以从JavaScript访问一个函数吗?
答案 0 :(得分:0)
我认为目前不可能在视图和/或过滤器之间对代码进行重复数据删除,尽管可以想象一个查询服务器可以让您访问这些类型的功能。