У меня есть база данных CouchDB, где я храню такие модели:
"_id": "id",
"_rev": "rev",
"field_1": "test",
"filed_2": 45,
"filed_3": 15,
"object_1": {
"field_1_1": 123,
"filed_1_2": 125
}
}
И я хочу искать модели по определенным параметрам в разных диапазонах (фильтрах).
Например, в одной ситуации мне нужно найти все модели с
- field_2 от 10 до 50
- field_3 от 10 до 20
- object_1.field_1_1 от 100 до 150, object_1.field_1_2 от 120 до 130
В другом случае мне нужно найти только все модели с field_2 от 10 до 50.
На данный момент я написал вид так:
function (doc) {
emit([doc.filed_2, doc.field_3, doc.object_1.field_1_1, doc.object_1.filed_1_2], 1);
}
Таким образом, он генерирует такой результат:
{"id":"id","key":[45,15,123, 125],"value":1}
Я могу использовать этот ключ массива для извлечения необходимых моделей, и я могу использовать «startkey» и «endkey» для генерации диапазонов.
Но есть ли более эффективный способ создания поиска по различным фильтрам (некоторые фильтры можно пропустить, пользователь выбирает фильтры, по которым он хочет искать) в CouchDB? Как я могу объединить различные параметры?
А как можно пропустить параметры, если они не были выбраны для поиска (как во втором случае)?
Спасибо.