Как запросить: массив не содержит (без учета регистра) элемента - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь получить документы, в которых теги array не содержат элемента, игнорирующего чувствительность к регистру.

Я использую обратный запрос к моему массиву содержит запрос:

.find({"tags":{"$regex": "^(?!someTag$)", "$options": "i"}})

Однако это возвращает также документы, в которых есть тег, отличный от someTag.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Ответ предоставлен коллегой:

Добавление простого $ не помогает.

.find({"tags": {"$not": {"$regex": "^(?!someTag$)", "$options": "i"}}},{"tags":1})
0 голосов
/ 06 мая 2020

Вы можете получить поведение array does not include с помощью оператора not equal $ne и нечувствительность к регистру с помощью сопоставления .

Рассмотрим коллекцию с несколькими тегами:

> db.coll.find({},{_id:0})
{ "tags" : [ "Tag1", "Tag2", "Tag3" ] }
{ "tags" : [ "tag1", "tag2", "tag3" ] }
{ "tags" : [ "TAG4", "TAG3", "TAG5" ] }
{ "tags" : [ "tag4", "tag6", "tag7" ] }

$ne может использоваться для исключения точных совпадений:

> db.coll.find({tags:{$ne:"tag3"}},{_id:0})
{ "tags" : [ "Tag1", "Tag2", "Tag3" ] }
{ "tags" : [ "TAG4", "TAG3", "TAG5" ] }
{ "tags" : [ "tag4", "tag6", "tag7" ] }

При добавлении сопоставления совпадение $ne может быть нечувствительным к регистру:

> db.coll.find({tags:{$ne:"tag3"}},{_id:0}).collation({locale:"en",strength:1})
{ "tags" : [ "tag4", "tag6", "tag7" ] }

Обратите внимание, что для использования индекса с этим запросом вам необходимо создать соответствующий индекс с тем же сопоставлением.

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