#javascript #node.js #mongodb
#javascript #node.js #mongodb
Вопрос:
Пытаюсь выполнить поиск в mongo, используя часть слова, которая хранится в документе
getCitiesWithQuery(reqQuery) {
let query = {$text: {$search: reqQuery}};
return db.collection('cities').find(query).toArray();
}
Но у меня такая ошибка:
MongoError: text index required for $text query
Как это исправить?
Комментарии:
1. Вам нужно посмотреть документацию $text , в ошибке четко указано, что требуется
text
индексировать определенные поля. по крайней мере, попробуйте найти эту ошибку в Google, вы получите некоторое представление о том, что вы пропустили.2. getCitiesWithQuery(reqQuery) { db.collection(‘cities’).createIndex({ «name»: «text»}); пусть query = {$text: {$search: reqQuery}, чувствительный к регистру: false}; возвращает db.collection(‘cities’).find(запрос). toArray(); }
3. Я сделал именно так, как они указали в документах, но это не работает
Ответ №1:
Сначала вам нужно создать текстовый индекс для этой коллекции. Приведенный ниже пример кода индексирует каждое поле, содержащее строковые данные для каждого документа в коллекции
db.cities.createIndex(
{ "$**": "text" }
)
Комментарии:
1. « getCitiesWithQuery(reqQuery) { db.collection(‘cities’).createIndex({ «name»: «text»}); пусть query = {$text: {$search: reqQuery}, чувствительный к регистру: false}; возвращает db.collection(‘cities’).find(запрос). toArray(); }
2. Он не делает то, что я ожидаю (((
3. Я думаю, вам нужно создать индекс вне вашей функции запроса, а не во время выполнения запроса
4. Нет, он создал индекс с именем text, но он не делает то, что я ожидал
5. Мне нужно найти способ поиска в поле с частью слова
Ответ №2:
По определению, $text ищет только слова. Если вы используете MongoDB Atlas, вы можете использовать Atlas Search, который позволяет выполнять частичный поиск (и нечеткое сопоставление и другие вещи).