У меня есть ионное приложение, которое хранит данные в локальном PouchDB.Создание сложных фильтров с CouchDB
Мои магазины базы данных документов, как в этом примере:
{
Timestamp: "2016-11-17T09:35:06",
Category: "CAT_1",
Place: "House",
...
Responsible: "Foo Bar",
...
},
{
Timestamp: "2016-11-07T18:45:11",
CategoryCode: "CAT_2",
Place: "Apartment",
...
Responsible: "Bar Foo",
...
}
Моя ионная приложение нуждается экран фильтра, в котором пользователь может выбрать любой/все из этих 4-х полей и применять его для фильтрации.
Таким образом, мой пользователь может выбрать только Timestamp
, чтобы найти ocurrencies только в определенную дату. Он может выбрать фильтр все одним Category
и так далее.
Он может создать любую комбинацию из этих 4-х элементов, как:
[Timestamp,Category]
[Timestamp,Place]
[Category,Place]
[Timestamp,Responsible]
...
Я всегда заказывать обратно на Timestamp
, но это не проблема.
Проблема заключается в том, что я не могу найти какую-либо функцию Map, которая может дать такой тип гибкости ...
Я знаю, что если пользователь должен заполнить все фильтры, я мог бы легко использовать эту функцию Map:
map:
function (doc) {
emit([Timestamp,Category,Place,Responsible], doc.Name);
}
С этим, я знаю, что я могу запросить эти возможности:
[Timestamp,{}]
[Timestamp,Category,{}]
[Timestamp,Category,Place,{}]
[Timestamp,Category,Place,Responsible]
Но я не могу фильтровать только [Place,Responsible]
потому что CouchDB/PouchDB не позволяют я положил подстановочные знаки слева, как [{},{},Place,Responsible]
, только справа, как я показал раньше.
Я знаю, что я могу создать одну карту для каждой возможности, но сегодня у нас есть четыре фильтров, а завтра это может быть десять!
Могут ли некоторые из вас дать мне намек на то, что я могу сделать, чтобы покрыть его?
Я знаю, что мой фон на SQL должен поставить меня в неправильном направлении, но я полагаю, что создать сложный фильтр с NoSQL и специально CouchDB/PouchDB не может быть сложно.
Невозможно, чтобы я был первым, кто пытался это сделать.
Спасибо за помощь!