在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议。 有时,明显的错过了