Я пытаюсь найти способ вернуть документ, основанный на том, является ли поле подстрокой данной строки.
Я получил работающий прототип, который в основном выбирает все из коллекции, а затем выполняет необходимую логику в коде. В коде я могу найти то, что хочу, перебирая каждый документ, а затем возвращая документ, основанный на search.includes(field)
. Это, очевидно, не идеальное решение, поскольку получение каждого документа в коллекции - это дорогостоящая операция, которая плохо масштабируется.
Следующее, что я сделал, - просмотр текстового поиска с использованием индексов MongoDB. Этот вид работает, но возвращает документы, даже если поле не является полной подстрокой поиска.
Можно ли как-нибудь создать запрос, который проверяет, является ли поле документа точной подстрокой данной строки?
Например, вот три документа, похожих на те, что есть в моей коллекции:
{
"_id": ObjectId("5b893f36e7e6ab1a88f87b39"),
"trigger": "hello",
"response": "World"
}
{
"_id": ObjectId("5b6ca6169cc009573bbc3571"),
"trigger": "stackoverflow",
"response": "Is awesome!"
}
{
"_id": ObjectId("5b6ca6169cc009573bbc3571"),
"trigger": "foo bar",
"response": "barfoo"
}
Вот некоторые случаи с ожидаемым результатом:
Строки поиска stack
или stackexchange
не должны возвращать никаких документов, так как нет триггерного поля, которое является идеальной подстрокой для них.
Строка hello stackexchange
должна получить только первый документ, поскольку поле триггера является подстрокой строки поиска.
Строка hello stackoverflow
выдаст вам оба документа, поскольку у них обоих есть поле триггера, которое является подстрокой строки поиска.
РЕДАКТИРОВАТЬ: Запрос также должен учитывать тот факт, что поле триггера может содержать пробелы. Поэтому строка foo bar foobar
должна соответствовать последнему документу, а строка foo
не должна.
Любая помощь очень ценится!