Dropping an existing index in MongoDB
While working with MongoDB and Node js I face an issue. I created mobile_no unique in starting and after some time I realized that I don't need my mobile_no to be unique. so I just go to my model and remove the unique: true property from my table schema and rebuild my app after. But strangely the changes in the schema did not reflect, I will still get the same error, mobile no must be unique. I have read my tutorial and found this code to Drop an existing index from mongo or mongoose using Model.
Here is a way to drop a unique index from the mongoose schema
'use strict'; var mongoose = require('mongoose'); var bcrypt = require('bcrypt'); var DriverSchema = new mongoose.Schema({ first_name: { type: String, required: true, trim: true }, last_name: { type: String, required: true, trim: true }, email: { type: String, required: true, trim: true, unique : true, }, emp_id: { type: String, trim: true, default: '' }, dob: { type: Date, default: Date.now }, address: { type: String, trim: true, default: '' }, locality: { type: String, trim: true, default: '' }, city: { type: String, trim: true, default: '' }, state: { type: String, trim: true, default: '' }, zipcode: { type: String, trim: true, default: '' }, country_code: { type: String, default: '' }, mobile_no: { type: String, trim: true, default: 0, }, mobile_verified: { type: Number, default:0 }, email_verified: { type: Number, default:0 }, device_id: { type: String, required: true, trim: true, default: '' }, gcm_id: { type: String, required: true, trim: true, default: '' }, profile_pic: { type: String, trim: true, default: '' }, device_type: { type: String, default: 'android' }, status: { type: String, default: 'pending' }, password: { type: String, required: true, }, created_at: { type: Date, default: Date.now }, updated_at: { type: Date, default: Date.now } }); // hashing password in MongoDB DriverSchema.pre('save', function(next) { let userValues = this; bcrypt.hash(userValues.password, 10).then((hash)=> { userValues.password = hash; //if there is no error we are going to hash console.log(hash); next(); }).catch((err)=> { console.log(err); }); }); // comparing password in MongoDB DriverSchema.methods.comparePassword = function(pwd){ let uInfo = this; return bcrypt.compareSync(pwd, uInfo.password); }; var Driver = mongoose.model('Driver', DriverSchema); // Dropping an Index in MongoDB Driver.collection.dropIndex('mobile_no', function(err, result) { if (err) { console.log('Error in dropping index!', err); } }); module.exports = Driver;
Hope it saves someone's time that I have wasted resolving this silly issue of MongoDB.
Also, Read Best Node JS Interview Questions