Поиск по фильтрам с использованием представлений в CouchDB - PullRequest
0 голосов
/ 07 мая 2018

У меня есть база данных 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? Как я могу объединить различные параметры?

А как можно пропустить параметры, если они не были выбраны для поиска (как во втором случае)?

Спасибо.

1 Ответ

0 голосов
/ 07 мая 2018

В CouchDB 2.x вы можете использовать конечную точку / db / _find с выражениями Mango для запроса базы данных.

Пожалуйста, проверьте синтаксис выражения , чтобы проверить, может ли оно удовлетворить ваши потребности.

...