使MongoDB文本中的表格字段可搜索

时间:2017-01-15 06:47:34

标签: node.js mongodb mongoose

先决条件

已经使用帖子集合创建了数据库,其架构如下:

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"})

然后开始工作几周,等等。

我做错了什么?我没有看到这几周发生的事情的趋势。我已经坚持这个问题几个星期了,所以如果有人可以提供帮助,我们将非常感激。

谢谢, 砂眼

1 个答案:

答案 0 :(得分:2)

最后,解决方案如下:

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

到目前为止,这就是诀窍。

我会再次检查一下,看看它是否会像每隔几周一样破裂。如果有的话会更新帖子。

感谢Andrei Neagu记录'错误'的建议。有时候,明显的人会错过