Попытка объединить операции AND и OR в запросах Mongoose при работе с массивом - PullRequest
0 голосов
/ 19 сентября 2018

У меня проблемы с поиском правильного способа запроса моих данных.Возможно, я сейчас слишком увлечен этой проблемой, потому что это одна из тех, "Разве это не должно быть легко?"вещи ...

Ситуация

Структура объекта коллекции, которую я хочу запросить, выглядит следующим образом:

{
    tags: [a, b, c],
    ...
}

Обратите внимание, что a , b и c - это ObjectIds, ссылающиеся на объекты-теги, которые, в свою очередь, выглядят так:

{
    category: "X",
    descriptor: "Y"
}

Проблема

Теперь пользователь может выбрать более одного тега из каждой категории.И в зависимости от этого части запроса должны обрабатываться по-разному.Для иллюстрации:

Пользователь выбирает A-1, A-2 и B-1 (используя нотацию category-descriptor), что означает, что он хочет найти объекты, соответствующие (A-1 или A-2) и B-1;значение массива tags означает [A-1, B-1], [A-2, B-1] или [A-1, A-2, B-1], ничего больше.(Изменить: только глядя на запрошенные теги, [A-2, B-1, C-5] также допустимо)

Текущая версия слишком строгая и находит только точные совпадения, но, чтобы дать вам пример, она выглядит так:

{ tags:
    { '$all': [ 'A-1', 'B-1' ]}
}

Я возился с несколькими способами объединить декартово произведение тегов той же категории и других, используя $all, а также $in, но, похоже, натолкнулся на дорожный блок, в настоящее время спрашивая, является ли объектструктура даже допускает тот тип запроса, который мне нужен ...


Редактировать

После прочтения этого еще несколько раз очевидное решение, похоже, вручную создает списокиз всех жизнеспособных комбинаций, как я сделал, когда объяснял это (то есть [[A-1, B-1], [A-2, B-1], [A-1, A-2, B-1]).Это кажется нежелательным решением, так как количество категорий может быть довольно большим.

...