mongo $text {$search: «что-то»}

#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, который позволяет выполнять частичный поиск (и нечеткое сопоставление и другие вещи).