每次启动服务器时,mongoose都试图创建索引带模式的索引:已存在,具有不同的选项

时间:2018-02-07 14:36:01

标签: node.js mongodb express mongoose

我的架构:

var courseSchema = mongoose.Schema({
    title: {
        type: String
    },
    instructors: {
        type: String
    },
    .
    .    
  fields: {type: [String], text: true},
  created_at: Date,
  updated_at: Date
});

courseSchema.index({title: 'text', subject: 'text', summary: 'text', syllabus: 'text'});

var Course = mongoose.model('Course', courseSchema);
module.exports = {Course};

搜索文字:

Course.find(
            { $text: { $search: req.query.title } },
            { score: { $meta: "textScore" } }
        ).sort( { score: { $meta: "textScore" } } 

    )

当我启动服务器时,它会给出错误:

MongoError: Index with pattern: { _fts: "text", _ftsx: 1 } already exists with different options

我尝试使用

删除索引
db.courses.dropIndex('title_text_subject_text_summary_text_syllabus_text');

但是当我重新启动服务器时,它再次出现相同的错误,我可以发现带有密钥_fts和_ftsx的索引已经存在。

我做错了哪一步? 提前谢谢。

编辑: 在创建索引的问题中,我没有添加这个字段。我删除它,它的工作正常。

fields: {type: [String], text: true},

2 个答案:

答案 0 :(得分:1)

我发现了自己的错误。我已经在架构中创建了一个索引

fields: {type: [String], text: true},

删除后,工作正常

答案 1 :(得分:0)

简单:不要在模式文件中创建索引。每次启动服务器时都会运行,并提供您看到的错误。

索引创建应该是您按需执行的维护任务,或者仅在您知道需要时执行。

您可以将其替换为ensureIndex,但也建议将其作为按需任务,而不是服务器启动任务。