先决条件:
已经使用帖子集合创建了数据库,其架构如下:
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');
}
});
});
我想要实现的目标:
我想在我的帖子表中创建一个名为 title 的文字可搜索的字段。
我的筹码:
MongoDB,NodeJS(使用Mongoose),Angular
我的方法:
正如先决条件中所述,我添加了一行:
postSchema.index({title: 'text'});
此外,我在创建集合后在终端中运行以下命令:
db.posts.createIndex({"title":"text"})
问题:
当我从URL访问它时,它最初工作,但几周后,它停止工作(我得到'发布不存在'而不做任何更改!)。为了让它再次运行,我必须删除集合并创建一个新集合并运行命令:
db.posts.createIndex({"title":"text"})
然后开始工作几周,等等。
我做错了什么?我没有看到这几周发生的事情的趋势。我已经坚持这个问题几个星期了,所以如果有人可以提供帮助,我们将非常感激。
谢谢, 砂眼
答案 0 :(得分:2)
最后,解决方案如下:
var postSchema = new Schema({
postID: String,
title: { type: String, text: true },
description: String
});
到目前为止,这就是诀窍。
我会再次检查一下,看看它是否会像每隔几周一样破裂。如果有的话会更新帖子。
感谢Andrei Neagu记录'错误'的建议。有时候,明显的人会错过