Фильтр MongoDB по свойству массива, только если он существует

Мой объект базы данных имеет необязательное свойство с именем tags, которое представляет собой массив строк. Я хочу написать запрос, который возвращает объекты, если они соответствуют одному из следующих условий:

  1. У них нет свойства tags.
  2. У них есть свойство tags, в котором хотя бы один элемент включен в другой массив с именем queryTags.

Прочитав документацию, я пришел к следующему, но это не работает:

let query = {
    tags: { '$or': [{'$exists': false}, {'$in': queryTags}]}
}

person Simeon Nakov    schedule 18.07.2018    source источник
comment
Попробуйте это db.collection.find({ "$or": [ { tags: { "$exists": false } }, { tags: { "$in": queryTags } } ] })   -  person Ashh    schedule 18.07.2018


Ответы (1)


$or — это оператор верхнего уровня, поэтому ваш запрос должен быть:

let query = {
    '$or': [{tags: {'$exists': false}}, {tags: {'$in': queryTags}}]
}
person JohnnyHK    schedule 18.07.2018