Raj Kumar
Raj Kumar

Reputation: 793

mongoose attempting to create index every time I start the server | Index with pattern: already exists with different options

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

Answers (2)

Raj Kumar
Raj Kumar

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

Paul
Paul

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

Related Questions