Как найти документы, какое поле является подстрокой для конкретной строки? - PullRequest
0 голосов
/ 20 января 2019

Есть ли способ найти документ в коллекции MongoDB, поле которого является подстрокой для моей "строки" ?

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

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

А моя «строка» , например, «смартфон». Таким образом, результат запроса должен быть:

{"str": "pho", ...}
{"str": "sma", ...}

Сейчас я использую это регулярное выражение для решения своей проблемы:

^[smartphone]+$

Это работает, но оно также будет соответствовать документам вроде {"str": "ophms", ...}, которые "str" ​​не являются подстрокой "smartphone".

Я знаю, мой вопрос точно такой же, как # 2123738 , но это касается баз данных sql, методы запросов которых сильно различаются.

1 Ответ

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

Вы можете использовать $indexOfCP, чтобы найти строку, являющуюся подстрокой другого, если да, в противном случае будет возвращен начальный индекс, в противном случае -1

{$expr : {$gte : [{$indexOfCP: ["smartphone","$str"]},0]}}

collection

> db.t60.find()
{ "_id" : ObjectId("5c44c5cc9d56bf65be5ab2de"), "str" : "pho" }
{ "_id" : ObjectId("5c44c5cc9d56bf65be5ab2df"), "str" : "sma" }
{ "_id" : ObjectId("5c44c5cc9d56bf65be5ab2e0"), "str" : "goa" }
{ "_id" : ObjectId("5c44c5cc9d56bf65be5ab2e1"), "str" : "aba" }

результат

> db.t60.find({$expr : {$gte : [{$indexOfCP: ["smartphone","$str"]},0]}})
{ "_id" : ObjectId("5c44c5cc9d56bf65be5ab2de"), "str" : "pho" }
{ "_id" : ObjectId("5c44c5cc9d56bf65be5ab2df"), "str" : "sma" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...