我正在使用CouchDB中的位置数据库。我创建了一个视图,其中我的键是一个具有舍入纬度和经度值的数组。现在我选择以下条件:
Startkey: [ 52.34, 4.883 ]
Endkey: [ 52.37, 4.903 ]
我希望我只会收到纬度介于52.34和52.37之间的文件。而经度在4.883和4.903之间。
我收到的结果:
[ 52.358, 4.919 ]
[ 52.358, 4.919 ]
[ 52.362, 4.861 ]
[ 52.362, 4.861 ]
[ 52.362, 4.861 ]
您可能已经注意到,在第一个结果中,经度大于结束键的经度,4.919。
现在我知道/读到某处我会收到一些超出数组中第二项范围的值。但是,第一项如何已经不符合标准呢?
我用Google搜索了一下,我无法真正找到startkey / endkey的解释为数组。谁可以向我解释一下CouchDB如何遍历文档并定义何时“开始”以及何时“结束”?
答案 0 :(得分:17)
使用这些键假设视图中包含以下数据:
startkey == [a, 11]
和endkey == [c, 11]
:
[a, 10]
[a, 11] <-- startkey
[a, 12] <--
[b, 10] <--
[b, 11] <--
[b, 12] <--
[c, 10] <--
[c, 11] <-- endkey
[c, 12]
(将返回标有箭头的所有内容。)
视图中的数据使用键进行排序。使用startkey
和endkey
,您可以控制视图中开始和结束的位置。您无法为数据指定约束。将返回在startkey
和endkey
之间排序的所有内容。有关详细信息,请阅读http://wiki.apache.org/couchdb/View_collation。
如果您想进行地理空间查询,请查看GeoCouch(https://github.com/couchbase/geocouch/)。
总结:CouchDB视图中的键存储在一维列表中。这些列表中的条目根据View_collation中的规则进行排序。二维数组可能看起来很特别,但实际上它们不是。 [a, 10]
在 [a]
之后 a
后 [b, 5]
之前 < em>之前 [c]
(例如)。
如果您使用startkey
和endkey
,则说出“包括startkey
之前和之后{包括endkey
之后的所有内容”。 startkey
和endkey
条目不必须出现在列表中。