2016-01-15 2 views
1

Я хочу, чтобы иметь возможность запрашивать couchdb между датами, я знаю, что это можно сделать с помощью startkey и endkey (он отлично работает), но можно ли выполнить запрос, например, так :Couchdb - диапазон дат + несколько параметров запроса

SELECT * 
FROM TABLENAME 
WHERE 
DateTime >= '2011-04-12T00:00:00.000' AND 
DateTime <= '2012-05-25T03:53:04.000' 
AND 
    Status = 'Completed' 
AND 
Job_category = 'Installation' 

ответ

2

В общем случае установление индексов на нескольких полях возрастает по мере увеличения количества полей.

Мой главный вопрос: do Status и Job_category нужно также запрашивать динамически? Если нет, то ваш взгляд прост:

function (doc) { 
    if (doc.Status === 'Completed' && doc.Job_category === 'Installation') { 
    emit(doc.DateTime); // this line may change depending on how you break up and emit the datetimes 
    } 
} 

Представления довольно дешево, (в зависимости от размера базы данных), так что не бойтесь установить несколько, которые охватывают различные случаи. Я ожидал бы что-то вроде Status, чтобы иметь предопределенный список доступных опций, так как он соответствует Job_category, который кажется может быть больше связан с пользовательским вводом.

Если вам нужны эти поля должны быть динамичными, вы можете просто добавить их в индекс, а также:

function (doc) { 
    emit([ doc.Status, doc.Job_category, doc.DateTime ]); 
} 

Затем вы можете использовать массив в качестве start_key. Например:

start_key=["Completed", "Installation", ...] 

tl; dr: использовать «статические» виды, где у вас есть предопределенный список значений для заданного поля. хотя можно запросить «динамические» представления с несколькими полями, сложность растет очень быстро.

+0

Это именно то, что я искал, thx много для вас ответ. – macrog

Смежные вопросы