2011-12-05 25 views
1

迄今为止,我在couchdb中创建的所有视图都使用了数字值。向键添加字母字符时,我感到有点意外。CouchDB查看模式匹配在密钥中组合数字和Alpha

我的观点是返回值如预期:

[2011,12,5,14,22,"foo"] 
[2011,12,5,14,23,"foo"] 
[2011,12,5,14,42,"bar"] 
[2011,12,5,15,2,"foo"] 
[2011,12,5,15,21,"foo"] 
[2011,12,5,15,23,"foo"] 
[2011,12,5,16,2,"foo"] 
[2011,12,5,16,21,"foo"] 
[2011,12,5,16,23,"foo"] 
[2011,12,5,16,42,"bar"] 

然而,当我查询这些使用的开始键:

[2011,12,5,14,16,"foo"] 

和结束键

[2011,12,5,16,60,"foo\ufff0"] 


http://couchdb_host:5984/the_db/_design/cf/_view/errors?startkey=[2011,12,5,14,16,%22foo%22]&endkey=[2011,12,5,16,60,%22foo\ufff0%22]&group_level=6 

我在结果中不断得到“bar”的值:

{"rows":[ 
{"key":[2011,12,5,14,22,"foo"],"value":2}, 
{"key":[2011,12,5,14,23,"foo"],"value":1}, 
{"key":[2011,12,5,14,42,"bar"],"value":1}, 
{"key":[2011,12,5,15,2,"foo"],"value":1}, 
{"key":[2011,12,5,15,21,"foo"],"value":2}, 
{"key":[2011,12,5,15,23,"foo"],"value":1}, 
{"key":[2011,12,5,16,2,"foo"],"value":1}, 
{"key":[2011,12,5,16,21,"foo"],"value":2}, 
{"key":[2011,12,5,16,23,"foo"],"value":1}, 
{"key":[2011,12,5,16,42,"bar"],"value":1} 
]} 

我在哪里掉下来?我期望“bar”被忽略,任何以“foo”开头的东西都会被返回。这一切在纸上似乎都很简单!

线索?

回答

3

CouchDB正在返回所有按键,它们对startkey和小于(或等于)endkey排序较高(或相等)。 [2011,12,5,14,42,“bar”]的排序高于[2011,12,5,14,16,“foo”],因为42高于16,低于[2011,12,5, 16,60,“富\ ufff0”],因为42小于60

本页面描述按键的排序方式:http://wiki.apache.org/couchdb/View_collation

+0

正如罗伯特说,你的查询您的范围是很多更广泛的比你期待。如果你只想在一个范围内搜索foo,你必须首先将它放在['foo',2011,12,5,14,16],然后像startkey = [%22foo%22,2011,12,5 ,14,16] endkey = [%22foo%22,2011,12,5,16,60]。 –