2017-01-15 135 views
1

先决条件一个表的字段:让MongoDB中搜索文本

数据库与收藏已经创建职位,它的架构如下:

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

我在努力实现什么:

我想在我的帖子表称为冠军全文检索的字段。

我的堆栈:

MongoDB的,的NodeJS(与猫鼬),角

我的方法:

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

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

此外,我已经在终端运行下面​​的命令一次收藏已创建:

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

问题

当我访问该从URL,它的工作原理开始,但几个星期后,它停止工作(我得到“后不存在'不作任何改变!)。为了让它恢复正常工作,我必须删除收集并重新创建一个,然后运行命令:

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

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

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

感谢, 傻眼

+0

我会在那里做什么,而不是返回'Post不存在',我会从那个错误(我认为是实际的错误)返回一些东西。也许你正在得到一个超时或类似的东西。任何mongo日志检查等? –

+0

重要的建议与错误。我已经参与了不到一年的发展,所以请原谅这个noob错误。 '错误'是:错误是:MongoError:$文本查询所需的文本索引 - 但我已经这样做了。不知何故,mondoDB本身已经忘记了我已经运行了这个命令。我会看看日志中是否有任何内容。 –

+0

嘿@AndreiNeagu - 我在下面发布了我的答案。感谢您的建议。如果未来的观众再次突破,我会保持这篇文章的更新。 –

回答

1

最后,溶液呈如下:

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

这并获得成功为止。

我会再次检查一遍,看看它是否每隔几周都会发生这种情况。如果有,请更新帖子。

谢谢安德烈Neagu记录'错误'的建议。有时候,显而易见的错误会被错过

+0

不客气。那么,你得到的实际错误信息是什么? –

+0

这是错误消息:错误是:MongoError:$文本查询所需的文本索引。 奇怪的是,当我创建一个名为'posts'的新表/集合并在terminal> mongo中运行命令:db.posts.createIndex({“title”:“text”})时它工作正常。但是,它每两周停止工作。 –

+0

我会密切注意这一点,如果有任何更改,我会更新我的帖子。 –