2017-01-15 1 views
1

Предпосылки:Сделать поле за столом в MongoDB текст для поиска

База данных создается уже с коллекциями сообщения и это схема выглядит следующим образом: маршрутизатор

module.exports = function(mongoose){ 
var Schema = mongoose.Schema; 

var postSchema = new Schema({ 
    postID:   String, 
    title:   String, 
    description:  String 
}); 

mongoose.model('post', postSchema, 'posts'); 
postSchema.index({title: 'text'}); 

}; 

в Node для обработки с помощью API :

apiRouter.get('/api/searchPosts', function(req, res, next){ 
    postModel.find(
     { $text : { $search : req.query.text } }, 
     { score : { $meta: "textScore" } } 
    ) 
    .sort({ score : { $meta : 'textScore' } }) 
    .exec(function(err, posts) { 
     if(posts){ 
      res.json({ 
       posts  : posts 
      }); 
     } else { 
      res.send('Post does not exist'); 
     } 
    }); 
}); 

Что я пытаюсь достичь :

Я хочу, чтобы сделать поле в моих сообщениях таблицы под названием названия текста для поиска.

Мой стек:

MongoDB, NodeJS (с Мангуста), Угловая

Мой подход:

Как уже упоминалось в Предпосылки, я добавил строку:

postSchema.index({title: 'text'}); 

Кроме того, я выполнил команду ниже в терминале один раз коллекции была создана:

db.posts.createIndex({"title":"text"}) 

Проблема:

Когда я получить доступ к этому из URL, он работает сначала, но после нескольких недель, он перестает работать (я получаю «Сообщение не существует «без внесения каких-либо изменений!). Для того, чтобы получить его снова работает, я должен удалить коллекции и сделать свежую и запустить команду:

db.posts.createIndex({"title":"text"}) 

Затем он начинает работать в течение нескольких недель, и так далее.

Что я делаю неправильно? Я не вижу тенденции к тому, что происходит за эти несколько недель. Я застрял в этом вопросе в течение нескольких недель, поэтому, если кто-то может помочь, он будет высоко оценен.

Спасибо, Шаян

+0

Что бы я там делал, вместо того, чтобы возвращать «Сообщение не существует», я бы вернул что-то из этого err (что я предполагаю, является фактической ошибкой). Возможно, вы получаете тайм-аут или что-то в этом роде. Любые журналы манго для проверки и т. Д.? –

+0

Отличное предложение с ошибкой. Я участвовал в разработке чуть меньше года, поэтому оправдываю ошибку noob. «err»: Ошибка: MongoError: текстовый индекс, необходимый для текстового запроса, но я уже это сделал. Так или иначе, mondoDB сам забыл, что я выполнил команду. Я увижу, есть ли что-нибудь в журналах. –

+0

Эй @ АндреяНеагу - я отправил свой ответ ниже. Спасибо за предложение. Я буду держать этот пост обновленным, если что-то снова откроется для будущих зрителей. –

ответ

1

В конце концов, решение было, как показано ниже:

var postSchema = new Schema({ 
    postID:   String, 
    title:   { type: String, text: true }, 
    description:  String 
}); 

Это сделал трюк до сих пор.

Я проверю это снова и посмотрю, ломается ли он, как это делалось каждые несколько недель. Обновит сообщение, если это произойдет.

Спасибо Andrei Neagu за регистрацию предложения 'err'. Иногда очевидные просто промахиваются.

+0

добро пожаловать. так, каково было фактическое сообщение об ошибке, которое вы получили? –

+0

Это сообщение было также: Ошибка: MongoError: требуется текстовый индекс для текстового запроса. Что странно, что он работал, когда я создал новую таблицу/коллекцию под названием «posts» и выполнил команду: db.posts.createIndex ({«title»: «text»}) в терминале> mongo. Однако он перестал работать каждые две недели. –

+0

Я буду следить за этим и обновлять свой пост, если будут какие-либо изменения. –

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

  • Нет связанных вопросов^_^