12

我正在使用 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 ]

您可能已经注意到,第一个结果中的经度大于 endkey 的经度 4.919。

现在我知道/在某处读到我会收到一些超出数组第二项范围的值。但是第一项怎么可能已经不符合标准呢?

我用谷歌搜索了一下,我真的找不到 startkey/endkey 作为数组的解释。谁能给我解释一下 CouchDB 如何遍历文档并定义何时“开始”和何时“结束”?

4

1 回答 1

20

使用这些键在您的视图中假设以下数据:

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您可以控制视图中的开始结束位置。您不能为数据指定约束。在两者之间排序并将返回的所有startkey内容endkey。请阅读http://wiki.apache.org/couchdb/View_collat​​ion了解更多信息。

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


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

如果你使用startkeyand ,你会说“包括和之后、之前和包括在内endkey的一切”。并且条目不必出现在列表中。startkeyendkeystartkeyendkey

于 2013-06-17T14:36:23.940 回答