如何用不确定性查询具有复杂嵌套键的设计视图

时间:2017-12-08 09:19:18

标签: couchdb

我可以访问CouchDB视图,该视图发出的文档包含两个四个整数的数组,如[[int, int, int, int], [int, int, int, int]]。在具体示例中,这些对应于文档的开始日期和结束日期:

[[2017, 5, 5, 10], [2017, 7, 2, 11]]
 Y      m  d  H     Y     m  d  H

我能够获得与期间相匹配的文件

request="localhorst/dbname/_design/a/_view/period"
request+="?key=\[\[2017,5,5,10\],\[2017,7,2,11\]\]"
curl -sX GET $request

问题:如何忽略"小时"字段H?

如果边界部分未知会怎么样?如何获取给定时间段内的所有文档,例如2017-05-05直到2017-07-02?换句话说,我怎样才能忽略每个边界的最后一列?

我尝试使用startKeyendKey

request="localhorst/dbname/_design/a/_view/period"
request+="?startKey=\[\[2017,5,5\],\[2017,7,2\]\]"
request+="&endKey=\[\[2017,5,5,\{\}\],\[2017,7,2,\{\}\]\]"
curl -sX GET $request

这不起作用,因为它获取具有正确下限但上限错误的文档,例如:

[[2017,4,5,10],[2017,7,2,12]] <- excluded,  OK
[[2017,5,5,10],[2017,7,2,12]] <- contained, OK
[[2017,5,5,11],[2017,7,2,12]] <- contained, OK
[[2017,5,5,10],[2017,8,2,12]] <- contained, ERROR

2 个答案:

答案 0 :(得分:3)

这是不可能的。如果使用复杂键,则可以通过仅将项目放在键阵列的右侧来执行与startkeyendkey的部分匹配,而不是通过在键阵列内部删除项目。

在不知道文档的结构如何的情况下,提供更多通用建议很困难。我希望发出一个时间戳矢量并使用startkey和endkey来查找范围,而不是尝试使用范围作为键。但是,这种方法可能不适合您的模型。

否则,如上所述,使用芒果可能是您最好的选择。

答案 1 :(得分:0)

您可以使用空作为开始键,将空对象{​​}作为最后一个。

所以2017-05-05到2017-07-02将是

[2017,05,05][2017,07,02,{},{},{}]

您可以参考以下答案:couchdb search or filtering on key array