【问题标题】:Make a table's field in MongoDB text searchable使 MongoDB 文本中的表字段可搜索
【发布时间】:2017-01-15 06:47:33
【问题描述】:

先决条件:

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

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

我想要达到的目标:

我想在我的 posts 表中创建一个名为 title 文本可搜索的字段。

我的堆栈:

MongoDB、NodeJS(使用 Mongoose)、Angular

我的方法:

如先决条件中所述,我已添加以下行:

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

此外,创建集合后,我已在终端中运行以下命令:

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

问题:

当我从 URL 访问它时,它最初可以工作,但几周后它停止工作(我得到“帖子不存在”而没有做任何更改!)。为了让它再次工作,我必须删除集合并重新创建一个并运行命令:

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

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

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

谢谢, 沙岩

【问题讨论】:

  • 我会在那里做的,不是返回“帖子不存在”,而是从那个错误中返回一些东西(我认为这是实际错误)。也许你正在超时或类似的事情。任何要检查的 mongo 日志等等?
  • 关于错误的好建议。我参与开发工作不到一年,所以请原谅这个菜鸟的错误。 'err' 是: 错误是: MongoError: text index required for $text query - 但我已经这样做了。不知何故,mondoDB 本身忘记了我已经运行了该命令。我也会看看日志中是否有任何内容。
  • 嘿@AndreiNeagu - 我已经在下面发布了我的答案。谢谢你的建议。如果以后的观众再次遇到任何问题,我会及时更新这篇文章。

标签: node.js mongodb mongoose


【解决方案1】:

最终解决方法如下:

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

到目前为止,这已经成功了。

我会再次检查它,看看它是否像每隔几周那样坏掉。如果有,会更新帖子。

感谢 Andrei Neagu 记录“错误”建议。有时,明显的会被忽略

【讨论】:

  • 不客气。那么,您收到的实际错误消息是什么?
  • 这是错误消息:错误是:MongoError:$text 查询需要文本索引。奇怪的是,当我创建一个名为“posts”的新表/集合并运行命令:db.posts.createIndex({"title":"text"}) in terminal> mongo.但是,它每隔几周就会停止工作。
  • 我会密切关注这一点,如果有任何变化,我会更新我的帖子。
  • 工作到今天。这就是解决方案。希望这对某人有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
相关资源
最近更新 更多