Поиск документов, массив которых содержит строку, являющуюся подстрокой к определенному слову, используя MongoDB - PullRequest
0 голосов
/ 22 января 2019

Предположим, у меня есть эта коллекция:

{"str": ["pho", "goa"], ...},
{"str": ["sma", "aba"], ...},
{"str": ["gag"], ...}
...

И я хочу выбрать все документы, поле которых (здесь str) содержит строку, которая является подстрокой для некоторого слова.smartphone например.Таким образом, результат запроса должен быть:

{"str": ["pho", "goa"], ...},
{"str": ["sma", "aba"], ...}

Как я могу это сделать?

Этот вопрос относится к # 54279248 , где вы надеваетене нужно искать в массиве.

1 Ответ

0 голосов
/ 22 января 2019

Вы можете использовать ниже агрегации:

db.collection.aggregate([
    {
        $match: {
            $expr: {
                $anyElementTrue: {
                    $map: {
                        input: "$str",
                        as: "s",
                        in: { $ne: [ -1, { $indexOfBytes: [ "smartphone", "$$s" ] } ] }
                    }
                }
            }
        }
    }
])

Идея состоит в том, что вы можете воспользоваться $ indexOfBytes , чтобы проверить, что строка из str содержится в "smartphone", а затем вам просто нужно использовать $ anyElementTrue для проверки если условие выполнено для любого элемента из str

игровая площадка Монго здесь

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