Reputation: 793
my schema:
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};
searching text:
Course.find(
{ $text: { $search: req.query.title } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } }
)
when I start the server it gives the error:
MongoError: Index with pattern: { _fts: "text", _ftsx: 1 } already exists with different options
I have tried to drop the index by using
db.courses.dropIndex('title_text_subject_text_summary_text_syllabus_text');
but when I restart the server, it again gives the same error and I can find that index with key _fts and _ftsx are already there.
Which step am I doing wrong? Thanks in advance.
edit: there was this field that I didn't add in the question which was creating the index. I removed it, its working fine.
fields: {type: [String], text: true},
Upvotes: 1
Views: 1849
Reputation: 793
I found my mistake. I was already creating an index in schema itself
fields: {type: [String], text: true},
after removing it, its working fine
Upvotes: 3
Reputation: 36319
Simple: Don't create the index in the schema file. That will run every time you start your server and give the error you're seeing.
Index creation should be a maintenance task you execute in demand or otherwise only when you know you need to.
You could swap that for ensureIndex
instead, but that's also recommended to be an on demand task, not an on server start task.
Upvotes: 0