假设我有一个存储日志消息的数据库。每条消息都包含优先级、日期和消息的信息。应用程序应该能够查询日志消息,可能受优先级限制,按日期排序。所以我可以创建一个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
但这意味着我必须在服务器(通过过滤器功能)和客户端(通过构造 and 的值)上复制选择逻辑(最小值、最大值、优先级范围、按优先级和日期)。startkey
endkey
真的有必要两次实现相同的逻辑吗?
或者至少可以在视图和过滤器函数之间共享为文档生成键值对的代码?这样,我可以为每个调用视图函数并接受startkey
andendkey
参数的视图拥有一个通用过滤器函数。我还需要一种方法来访问 CouchDB 的算法来比较密钥。有没有我可以从 JavaScript 访问的函数?