我是Couchbase的新手,我正在努力获得一个综合指数来做我想做的事情。用例是这样的:
我创建了一个像这样的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'排序,但它不会过滤任何内容!谁能告诉我我做错了什么?是否有更好的复合视图来实现这些结果?
答案 0 :(得分:1)
在使用startkey - endkey查询视图时,在couchbase中,您无法按2个或更多属性过滤结果。 Couchbase只有一个索引,因此它只会通过第一个参数过滤您的结果。因此,您的查询将与查询相同:
startkey = ["a"]
endkey = ["Z"]
这是一个link来完成Filipe Manana的答案,为什么不能按这些日期过滤。
以下是它的引用:
对于复合键(数组),元素从左到右进行比较,一旦元素与另一个键中的对应元素不同,比较就会完成(与比较字符串àrapcmp()或strcmp时会发生的情况相同) ())。
因此,如果您想要一个按日期过滤的视图,则日期数组应该在复合键中首先显示。