在couchbase综合意见(Composite views in couchbase)

2019-10-30 04:00发布

我是新来的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]

虽然列表是由“身份证”排序它没有任何过滤! 谁能告诉我,我做错了什么? 有没有更好的复合视图,以取得这些成果?

Answer 1:

在couchbase当您通过startkey查询视图 - endkey您无法通过2个或多个属性筛选结果。 Couchbase只有一个指标,所以只能由第一个参数过滤搜索结果。 所以,你的查询将等同与查询:

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

这里是一个链接通过菲利普MANANA完成答案,为什么它不能被这些日期进行过滤。

下面是它报价:

对于复合键(阵列),元件被比较由左到右和比较一旦一个元件处于所述其他键由相应的元件不同饰面(相同比较字符串时会发生什么情况点菜memcmp()或的strcmp()) 。

所以,如果你想有一个按日期过滤视图,日期数组首先进入复合键。



文章来源: Composite views in couchbase