2016-11-25 4 views
1

Я пытаюсь выполнить полнотекстовый поиск на массив строк в Mongoose, и я получаю эту ошибку:полнотекстового поиска в узле JS с Mongoose

{ [MongoError: text index required for $text query] 
    name: 'MongoError', 
    message: 'text index required for $text query', 
    waitedMS: 0, 
    ok: 0, 
    errmsg: 'text index required for $text query', 
    code: 27 } 

Однако, у меня есть текстовый индекс, объявленный в поле в пользовательской схеме, и я подтвердил, что текстовый индекс был создан, потому что я использую mLab. Я пытаюсь выполнить полнотекстовый поиск по полям

Вот моя схема Пользователь:

var userSchema = mongoose.Schema({ 
     local: { 
      firstName: String, 
      lastName: String, 
      username: String, 
      password: String, 
      fields: {type: [String], index: true} 
     } 
}); 

Вот мой код для полнотекстового поиска:

User.find({$text: {$search: search}}, function (err, results) { 
       if (err) { 
        console.log(err); 
       } else { 
        console.log(results); 
       } 
     }); 
+0

Какая версия mogoose вы используете? – Mitchapp

+0

В настоящее время с использованием Mongoose 4.7.0 – Jasch1

+0

вам нужно создать текстовый индекс в ваших полях: [пример] (https://docs.mongodb.com/manual/reference/operator/query/text/#examples) –

ответ

6

Для $text запросов для работы, MongoDB необходимых индексировать поля с текстовым индексом. Для того, чтобы создать этот индекс по мангусту использовать

fields: {type: [String], text: true} 

See here для MongoDB documenation текстовых индексов.

2

Вам нужно добавить текстовый индекс к вашей схеме, как показано ниже:

userSchema.index({fields: 'text'}); 

Или использовать userSchema.index({'$**': 'text'});, если вы хотите включить все строковые поля

Смежные вопросы