2

Tried to insert auto increment number for serial number in mongodb using mongoose and nodejs but not working.Where i want to update my code to find solution.If anyone knows please help to find solution.

subs.model.js:

const mongoose = require('mongoose');
var subscriberSchema = new mongoose.Schema({
    _id: {type: String, required: true},
    email: {
        type: String
    }
}, {
    versionKey: false,
    collection: 'subscribers'
});

module.exports = mongoose.model('Subscribers', subscriberSchema);

data.controller.js:

module.exports.subscribeMail = (req, res, next) => { 
    var subscribeModel = mongoose.model("Subscribers");
    var subscribemailid = req.query.email;
    var subscribe = new subscribeModel({
        email: subscribemailid
    });

    var entitySchema = mongoose.Schema({
        testvalue: { type: String }
    });
 
    subscribe.save(function(error, docs) {
        if (error) { console.log(error); } else {
            console.log("subscribe mail id inserted");
            console.log(docs)
            res.json({ data: docs, success: true });
        }
    });

    entitySchema.pre('save', function(next) {
        var doc = this;
        subscribe.findByIdAndUpdate({ _id: 'entityId' }, { $inc: { seq: 1 } }, function(error, counter) {
            if (error)
                return next(error);
            doc.testvalue = counter.seq;
            next();
        });
    });
};

If i use above code inserting data into mongodb like below:

_id:5f148f9264c33e389827e1fc
email:"test@gmail.com"

_id:6f148f9264c33e389827e1kc
email:"admin@gmail.com"

But i want to insert like this

_id:5f148f9264c33e389827e1fc
serialnumber:1
email:"test@gmail.com"

_id:6f148f9264c33e389827e1kc
serialnumber:2
email:"admin@gmail.com"
Makizh
  • 189
  • 2
  • 9
  • 18
  • Does this answer your question? [Mongoose auto increment](https://stackoverflow.com/questions/28357965/mongoose-auto-increment) – Simon Jul 20 '20 at 19:17

1 Answers1

1

You can use this plugin: https://www.npmjs.com/package/mongoose-auto-increment

First you need to initialize it after creating Mongoose connection:

const connection = mongoose.createConnection("mongodb://localhost/myDatabase");
 
autoIncrement.initialize(connection);

Than in your subs.model.js file:

const mongoose = require('mongoose');
const autoIncrement = require('mongoose-auto-increment');

var subscriberSchema = new mongoose.Schema({
    _id: {type: String, required: true},
    email: {
        type: String
    }
}, {
    versionKey: false,
    collection: 'subscribers'
});

subscriberSchema.plugin(autoIncrement.plugin, {
    model: 'Subscribers',
    field: 'serialnumber'
});

module.exports = mongoose.model('Subscribers', subscriberSchema);
domenikk
  • 1,723
  • 1
  • 10
  • 12
  • I have connected mongodb like this mongoose.connect(process.env.MONGODB_URI, (err) => { if (!err) { console.log('MongoDB connection succeeded.'); } else { console.log('Error in MongoDB connection : ' + JSON.stringify(err, undefined, 2)); } }); – Makizh Jul 20 '20 at 17:19
  • So where i want to add this code: const connection = mongoose.createConnection("mongodb://localhost/myDatabase"); autoIncrement.initialize(connection); – Makizh Jul 20 '20 at 17:20
  • You concept is not working..Need to update data.controller.js? – Makizh Jul 20 '20 at 17:25
  • You can use mongoose.connection instead of connection in that case. More info: https://mongoosejs.com/docs/connections.html#multiple_connections Regarding your controller, the entitySchema code blocks are not needed – domenikk Jul 20 '20 at 17:28