startkey和endkey究竟如何在CouchDB中运行?

时间:2013-06-17 13:18:32

标签: couchdb

我正在使用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如何遍历文档并定义何时“开始”以及何时“结束”?

1 个答案:

答案 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]

(将返回标有箭头的所有内容。)

视图中的数据使用键进行排序。使用startkeyendkey,您可以控制视图中开始结束的位置。您无法为数据指定约束。将返回在startkeyendkey之间排序的所有内容。有关详细信息,请阅读http://wiki.apache.org/couchdb/View_collation

如果您想进行地理空间查询,请查看GeoCouch(https://github.com/couchbase/geocouch/)。


总结:CouchDB视图中的键存储在一维列表中。这些列表中的条目根据View_collation中的规则进行排序。二维数组可能看起来很特别,但实际上它们不是。 [a, 10][a]之后 a [b, 5]之前 < em>之前 [c](例如)。

如果您使用startkeyendkey,则说出“包括startkey之前和之后{包括endkey之后的所有内容”。 startkeyendkey条目必须出现在列表中。