Mon goose - Query Mon go Массив объектов, соответствует любому объекту в массиве поиска. - PullRequest
1 голос
/ 01 марта 2020

У меня есть схема Mon go с двумя массивами объектов, которая выглядит следующим образом:

genre: {Type: [Object]},
type: {Type: [Object]}

Example Document Data:
genre: [
{name: "scifi", selected: true}, 
{name: "fantasy", selected: false,
{name: "western", selected: true}, 
],
type: [
{name: "module", selected: true},
{name: "rulebook", selected: true},
{name: "artwork", selected: false},
]

Как мне выполнить запрос, который принимает массив жанров / типов и возвращает любые документы, которые соответствуют ?

findGenres = [
    {name: "scifi", selected: true}, 
    {name: "western", selected: true}, 
]
findTypes = [
    {name: "rulebook", selected: true}
]

Так что, когда я буду искать, это вернет только книги правил, помеченные как scifi или western.

1 Ответ

0 голосов
/ 02 марта 2020

Давайте разберем запрос пополам для лучшего объяснения.

ЧАСТЬ 1 (РЕДАКТИРОВАННАЯ)

для проверки имени и выбора одного объекта в genre, вы можете использовать этот запрос, чтобы найти один элемент в массиве:

model.find('genre': {"$elemMatch": {name: "scifi", selected: true} })

вы можете сделать то же самое для type

ЧАСТЬ 2

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

model.find({
    "$or": [
        {'genre': {"$elemMatch": {name: "scifi", selected: true} }},
        {'type': {"$elemMatch": {name: "rulebook", selected: true} }}
     ]
)}

PART 3

Теперь все, что вам нужно сделать, это отобразить findGenres и findTypes в один и тот же массив в части 1 и вставить в часть 2, и все готово.

надеюсь, это поможет;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...