如何在Couchbase中的Map / Reduce索引中对数字属性进行范围查询

时间:2015-07-02 11:32:01

标签: couchbase couchbase-view

让我说我的桶里有4个文件:
DOC-1:

{
  "created_time": 1435819571221,
  "field_1": false,
  "field_2": false,
  "version": 2
}

DOC-2:

{
  "created_time": 1435819571221,
  "field_1": true,
  "field_2": false,
  "version": 3
}

DOC-3:

{
  "created_time": 1435819571221,
  "field_1": true,
  "field_2": true,
  "version": 10
}

DOC-4:

{
  "created_time": 1435819571221,
  "field_1": true,
  "field_2": true,
  "version": 12
}

我想查询版本> = 10的所有文档 所以我创建了一个将该版本作为键发布的视图,以为我可以使用startKey x查询以获得比x更新的所有版本。

问题是沙发基地按字典顺序进行查询 所以在上面的例子中,我将取回所有4个文档 我怎样才能让它按数字的自然顺序工作?

谢谢, 迈克尔

2 个答案:

答案 0 :(得分:1)

我可能没有正确理解,但当我尝试了你提到的内容时,我收到了两个预期结果:

为了测试我做了以下事情:

  1. 创建了一个新的存储桶
  2. 创建了四个文档,其中包含您已指定的数据
  3. 使用以下代码创建了一个视图(我不认为StackOverflow格式正确):

    function(doc,meta){emit(doc.version,null); }

  4. 在视图中添加了一个过滤器,其startKey为10,然后查询结果

  5. 在结果中,我收到了第10版和第12版。

    我提到的文档可以在这里找到:

    http://docs.couchbase.com/admin/admin/Views/views-querySample.html

    如果我误解了或者这是否解决了您的问题,请告诉我。

    此致

答案 1 :(得分:0)

好吧,这是我的一个错误 - 在我的例子中,我发出的密钥是一个数字,但在我实际面对的情况下,键是带有数字的字符串:
 " id :: 20 :: some@email1.com" ;," id :: 22 :: some@email2.com" ;," id :: 100 :: some @ email3.com&#34 ;.
所以当我使用startKey =" id :: 20"进行范围查询时它没有返回" id :: 100 :: some@email3.com"文档,因为它按字典顺序排序......

谢谢 - 你帮我理解了我的错误...... 迈克尔