繁体   English   中英

Couchbase中的复合视图

[英]Composite views in couchbase

我是Couchbase的新手,正在努力获取复合索引来执行我想要的操作。 用例是这样的:

  • 我有一组“枚举”存储为文档
  • 每个都有一个“ last_updated”字段,正如您可能已经猜到的那样,该字段存储该字段的最后更新时间
  • 我只希望显示那些自给定日期以来已更新的枚举,但仍按枚举名称对列表进行排序

我已经创建了一个Couchbase视图,如下所示:

function (doc, meta) {
   var time_array;
   if (doc.doc_type === "enum") {
      if (doc.last_updated) {
         time_array = doc.last_updated.split(/[- :]/);
      } else {
         time_array = [0,0,0,0,0,0];
   }
   for(var i=0; i<time_array.length; i++) { time_array[i] = parseInt(time_array[i], 10); }
   time_array.unshift(meta.id);
   emit(time_array, null);
}

}

我有一条记录没有设置last_updated字段,因此它的时间字段都设置为零。 我认为,作为第一个测试,我可以过滤掉该结果,然后输入以下内容:

startkey = ["a",2012,0,0,0,0,0]
endkey = ["Z",2014,0,0,0,0,0]

当列表按“ id”排序时,它没有过滤任何内容! 谁能告诉我我在做什么错? 是否有更好的综合视图来实现这些结果?

在沙发床中,当您通过startkey-endkey查询视图时,无法按2个或更多属性过滤结果。 Couchbase只有一个索引,因此它将仅按第一个参数过滤结果。 因此,您的查询将与以下查询相同:

startkey = ["a"]
endkey = ["Z"]

这是Filipe Manana完整答案的链接 ,为什么不能按那些日期过滤它。

这是它的引文:

对于复合键(数组),元素从左到右进行比较,并且当一个元素与另一个键中的对应元素不同时,比较就结束(与比较字符串àla memcmp()或strcmp()时发生的情况相同) 。

因此,如果要使用按日期筛选的视图,则日期数组应在复合键中排在第一位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM