如何不确定地查询具有复杂嵌套键的设计视图
how to query with uncertainty a design view with complex nested keys
我正在访问 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
问题:如何忽略"hour"字段H?
如果边界部分未知怎么办?如何获取给定时间段内的所有文件,比如2017-05-05
直到2017-07-02
?换句话说,如何忽略每个边界的最后一列?
我尝试使用 startKey
和 endKey
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
这不可能。如果您使用复杂的键,您可以通过仅将项目放在键数组的右侧而不是通过将项目放在键数组内部来执行与 startkey
和 endkey
的部分匹配。
在不知道您的文档结构的情况下,很难提供比通用建议更多的信息。我希望发出单个时间戳向量并使用 startkey 和 endkey 来查找范围,而不是尝试使用范围作为键。但是,这种方法可能不适合您的模型。
否则,如上所述,使用 Mango 可能是您的最佳选择。
您可以使用空作为开始键,空对象 {} 作为最后一个。
所以 2017-05-05 到 2017-07-02 将是
[2017,05,05]
到 [2017,07,02,{},{},{}]
可以参考这个回答:couchdb search or filtering on key array
我正在访问 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
问题:如何忽略"hour"字段H?
如果边界部分未知怎么办?如何获取给定时间段内的所有文件,比如2017-05-05
直到2017-07-02
?换句话说,如何忽略每个边界的最后一列?
我尝试使用 startKey
和 endKey
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
这不可能。如果您使用复杂的键,您可以通过仅将项目放在键数组的右侧而不是通过将项目放在键数组内部来执行与 startkey
和 endkey
的部分匹配。
在不知道您的文档结构的情况下,很难提供比通用建议更多的信息。我希望发出单个时间戳向量并使用 startkey 和 endkey 来查找范围,而不是尝试使用范围作为键。但是,这种方法可能不适合您的模型。
否则,如上所述,使用 Mango 可能是您的最佳选择。
您可以使用空作为开始键,空对象 {} 作为最后一个。
所以 2017-05-05 到 2017-07-02 将是
[2017,05,05]
到 [2017,07,02,{},{},{}]
可以参考这个回答:couchdb search or filtering on key array