【发布时间】:2017-01-15 06:47:33
【问题描述】:
先决条件:
已经使用集合 posts 创建了数据库,其架构如下:
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'});
};
要通过 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');
}
});
});
我想要达到的目标:
我想在我的 posts 表中创建一个名为 title 文本可搜索的字段。
我的堆栈:
MongoDB、NodeJS(使用 Mongoose)、Angular
我的方法:
如先决条件中所述,我已添加以下行:
postSchema.index({title: 'text'});
此外,创建集合后,我已在终端中运行以下命令:
db.posts.createIndex({"title":"text"})
问题:
当我从 URL 访问它时,它最初可以工作,但几周后它停止工作(我得到“帖子不存在”而没有做任何更改!)。为了让它再次工作,我必须删除集合并重新创建一个并运行命令:
db.posts.createIndex({"title":"text"})
然后它开始工作几个星期等等。
我做错了什么?我没有看到这几周发生的事情的趋势。我已经在这个问题上停留了几个星期,所以如果有人可以提供帮助,我们将不胜感激。
谢谢, 沙岩
【问题讨论】:
-
我会在那里做的,不是返回“帖子不存在”,而是从那个错误中返回一些东西(我认为这是实际错误)。也许你正在超时或类似的事情。任何要检查的 mongo 日志等等?
-
关于错误的好建议。我参与开发工作不到一年,所以请原谅这个菜鸟的错误。 'err' 是: 错误是: MongoError: text index required for $text query - 但我已经这样做了。不知何故,mondoDB 本身忘记了我已经运行了该命令。我也会看看日志中是否有任何内容。
-
嘿@AndreiNeagu - 我已经在下面发布了我的答案。谢谢你的建议。如果以后的观众再次遇到任何问题,我会及时更新这篇文章。