【问题标题】:How to use autoIndex in mongoose / mongodb如何在 mongoose / mongodb 中使用 autoIndex
【发布时间】:2020-06-20 21:00:51
【问题描述】:

我在我的项目中使用 mongodb 和 mongoose。我正在尝试使用文本索引,以便实现搜索功能。我已将 auotIndex 选项设置为 true,但我仍然收到以下错误“MongoError: text index required for $text query”,这表明尚未生成文本索引,因此如果我没记错的话 autoIndex 不起作用。

顺便说一句,我知道 autoIndex 不应该用于生产就绪的应用程序,因为它很重,但我正在进行的项目只是为了学习目的。

// Database start upp
(async () => {
    const DB_URI = "mongodb://localhost:27017/photogram-db";

    const DB_SETTINGS = {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        useCreateIndex: true,
        autoIndex: true
    };

    await mongoose.connect(DB_URI, DB_SETTINGS);
})();


// Person model / schema
const PersonSchema = new Schema({
    firstName: String,
    lastName: String,
    username: String,
});

PersonSchema.index({
    firstName: "text",
    lastName: "text",
    username: "text"
});

const PersonModel = model("Person", PersonSchema);

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    文本索引创建需要一些时间,所以我猜当您使用文本搜索时它还没有准备好? 也许您可以尝试在索引完成时监听索引事件。

     PersonModel.on('index', function(error) {
          console.log('index is finished');
      });
    

    【讨论】:

    • 你是对的,索引创建是在错误之后完成的。那我该如何修复它,我是否需要事先编写创建索引的脚本,如果是,我该如何编写脚本或这样的脚本是否已经存在
    • 如果您需要在每次应用启动时创建集合,您可能需要在索引事件处理程序中进行文本查询。如果没有,您可以使用 Mongo 控制台,连接到数据库,创建文本索引,然后在没有索引部分的情况下启动您的应用程序。这个问题对于文本索引可能是唯一的,因为对于其他类型的索引,即使没有建立索引,您仍然可以进行查询。
    • 感谢您的信息,我通过在数据库连接之后和应用程序启动之前直接创建索引解决了这个问题,我不知道这是正确的方法还是好的方法.
    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 2015-07-22
    • 2021-06-18
    • 2022-07-22
    • 2019-04-25
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多