Предпосылки:Сделать поле за столом в 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"})
Затем он начинает работать в течение нескольких недель, и так далее.
Что я делаю неправильно? Я не вижу тенденции к тому, что происходит за эти несколько недель. Я застрял в этом вопросе в течение нескольких недель, поэтому, если кто-то может помочь, он будет высоко оценен.
Спасибо, Шаян
Что бы я там делал, вместо того, чтобы возвращать «Сообщение не существует», я бы вернул что-то из этого err (что я предполагаю, является фактической ошибкой). Возможно, вы получаете тайм-аут или что-то в этом роде. Любые журналы манго для проверки и т. Д.? –
Отличное предложение с ошибкой. Я участвовал в разработке чуть меньше года, поэтому оправдываю ошибку noob. «err»: Ошибка: MongoError: текстовый индекс, необходимый для текстового запроса, но я уже это сделал. Так или иначе, mondoDB сам забыл, что я выполнил команду. Я увижу, есть ли что-нибудь в журналах. –
Эй @ АндреяНеагу - я отправил свой ответ ниже. Спасибо за предложение. Я буду держать этот пост обновленным, если что-то снова откроется для будущих зрителей. –