Thursday 20 April 2017

E11000 duplicate key error collection:

The following piece of code which works fine. However,when I run it again from my cmd(node server),I get a duplicate key message of the dish name. I have two files. The dishes.js where I define my schemas and make available to my second file called server.js.

dishes

    // grab the things we need
    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;

    var commentSchema = new Schema({
        rating:  {
            type: Number,
            min: 1,
            max: 5,
            required: true
        },
        comment:  {
            type: String,
            required: true
        },
        author:  {
            type: String,
            required: true
        }
    }, {
        timestamps: true
    });
    // create a schema
    var dishSchema = new Schema({
        name: {
            type: String,
            required: true,
            unique: true
        },
        description: {
            type: String,
            required: true
        },
        comments:[commentSchema]
    }, 
    {
        timestamps: true
    });

    // the schema is useless so far
    // we need to create a model using it
    var Dishes = mongoose.model('Dish', dishSchema);

    // make this available to our Node applications
    module.exports = Dishes;

and my server.js file.

            var mongoose = require('mongoose'),
            assert = require('assert');

        var Dishes = require('./models/dishes-3');

        // Connection URL
        var url = 'mongodb://localhost:27017/conFusion';mongoose.connect(url);
        var db = mongoose.connection;
        db.on('error', console.error.bind(console, 'connection error:'));
        db.once('open', function () {
            // we're connected!
            console.log("Connected correctly to server");

            // create a new dish
            Dishes.create({
                name: 'Uthapizza',
                description: 'Test',
                comments: [
                    {
                        rating: 3,
                        comment: 'This is insane',
                        author: 'Matt Daemon'
                    }
                ]
            }, function (err, dish) {
                if (err) throw err;
                console.log('Dish created!');
                console.log(dish);

                var id = dish._id;

                // get all the dishes
                setTimeout(function () {
                    Dishes.findByIdAndUpdate(id, {
                            $set: {
                                description: 'Updated Test'
                            }
                        }, {
                            new: true
                        })
                        .exec(function (err, dish) {
                            if (err) throw err;
                            console.log('Updated Dish!');
                            console.log(dish);

                            dish.comments.push({
                                rating: 5,
                                comment: 'I\'m getting a sinking feeling!',
                                author: 'Leonardo di Carpaccio'
                            });

                            dish.save(function (err, dish) {
                                console.log('Updated Comments!');
                                console.log(dish);

                                db.collection('dishes').drop(function () {
                                    db.close();
                                });
                            });
                        });
                }, 3000);
            });
        });

If you pay a close attention in the server.js file I have removed the unique: true attribute from by dishes.js file,but I still have the same problem.

    name: {
        type: String,
        required: true,
        unique: true
    },



via Theo

No comments:

Post a Comment