我的架构:
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},
答案 0 :(得分:1)
我发现了自己的错误。我已经在架构中创建了一个索引
fields: {type: [String], text: true},
删除后,工作正常
答案 1 :(得分:0)
简单:不要在模式文件中创建索引。每次启动服务器时都会运行,并提供您看到的错误。
索引创建应该是您按需执行的维护任务,或者仅在您知道需要时执行。
您可以将其替换为ensureIndex
,但也建议将其作为按需任务,而不是服务器启动任务。