Я новичок в 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]
Хотя список отсортирован по «ид» он ничего не фильтруя! Может ли кто-нибудь сказать мне, что я делаю неправильно? Есть ли лучший составной результат для достижения этих результатов?
Однако я не понимаю, что если я не привожу в строковый компонент и вместо этого просто использую элементы массива, которые являются различными аспектами даты и времени, я могу фильтровать с помощью start/end_key через к любому элементу массива, и кажется, что они также используются для сортировки. – ken
Да. Couchbase сортирует результат по ключу, поэтому, если у вас есть сложный ключ, такой как '[doc.a, doc.b, doc.c]' docs будут сначала отсортированы по doc.a, тогда значения с одинаковым doc.a будут отсортированы по doc .b и так далее. Такое же поведение используется для фильтрации, если 'startkey: ['a', 'b', 'c']' и 'endkey: ['z', 'x', 'c']' couchbase найти все ключи, которые остаются только первое состояние. Но если у вас есть одинаковые значения в ключах запуска/завершения, таких как '['a', 'b']' и '['a', 'x']' couchbase будет выбирать документы с помощью 'doc.a = 'a'' и 'doc.b = 'b' .. 'x''. – m03geek