在MongoDB文本中创build一个表格字段可search

先决条件

数据库已经与集合的职位创build,它的架构如下:

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'); } }); }); 

我正在努力实现的是:

我想在我的post表中创build一个名为title text可search的字段。

我的堆栈:

MongoDB,NodeJS(有Mongoose),Angular

我的方法是:

正如在先决条件中提到的,我已经添加了这一行:

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

而且,一旦创build了集合,我在terminal中运行了下面的命令:

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

问题是

当我从URL访问它时,它最初起作用,但在几个星期后,它停止工作(我得到'Post不存在'没有做任何改变! 为了再次运行它,我必须删除集合并重新创build集合并运行命令:

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

然后开始工作几个星期等等。

我做错了什么? 我没有看到这几周发生的事情的一个趋势。 我一直在这个问题上坚持了几个星期,所以如果有人可以帮助,将不胜感激。

谢谢沙燕

最终解决scheme如下:

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

这到目前为止,

我会再次检查一下,看看它是否每隔几个星期都会发生这种情况。 如果有的话,会更新这个post。

谢谢安德烈Neagulogging'错误'的build议。 有时,明显的错过了