indu ECE
indu ECE

Reputation: 85

Nodejs:Array data not added in mongodb

This is my model profile.js

var mongoose = require('mongoose');

const ProfileSchema = mongoose.Schema({
    educationinfo: [{
        universityname:
        {
            type: String,
            required: true
        },
        degree:
        {
            type: String,
            required: true
        },
        coursecompletionyear:
        {
            type: String,
            required: true
        },
        collegename:
        {
            type: String,
            required: true
        },
        specialization:
        {
            type: String,
            required: true
        },
        marks:
        {
            type: String,
            required: true
        },
        courselevel:
        {
            type: String,
            required: true
        }
    }]
});

const Profile = module.exports = mongoose.model('Profile', ProfileSchema);

This is my route.js post function

router.post('/addprofiledetails', function(req, res, next) {
  let newProfile = new Profile({
    $educationinfo:[{
        universityname:req.body.universityname,
        degree:req.body.degree
    }]
  });
  newProfile.save((err, profile) => {
    if (err) {
        res.json({ msg: 'Failded to add profiledetails' });
    } else {
        res.json({ msg: 'successfully add profile details' });
    }
  });
});

I got success msg in post function but the data not added in mongodb. i don't know where i did mistake .please help me.

In mongoDB I got data like,

{
    "educationinfo": [],
    "_id": "5bed14b93a107411a0334530",
    "__v": 0
}

I want details inside educationinfo, please help.

Upvotes: 1

Views: 45

Answers (3)

codejockie
codejockie

Reputation: 10854

Since you marked the properties of educationinfo as required, you need to provide them when you create an instance of Profile. If you don't want to do that you need to remove the required property from those properties that you won't be supplying on instance creation like below:

const mongoose = require('mongoose');

const ProfileSchema = mongoose.Schema({
    educationinfo: [{
        universityname:
        {
            type: String,
            required: true
        },
        degree:
        {
            type: String,
            required: true
        },
        coursecompletionyear:
        {
            type: String
        },
        collegename:
        {
            type: String
        },
        specialization:
        {
            type: String
        },
        marks:
        {
            type: String
        },
        courselevel:
        {
            type: String
        }
    }]
});

const Profile = module.exports = mongoose.model('Profile', ProfileSchema);

After making those changes, you need to make one more change in your POST route, change $educationinfo to educationinfo

router.post('/addprofiledetails', function(req, res, next) {
  const newProfile = new Profile({
    educationinfo:[{
        universityname: req.body.universityname,
        degree: req.body.degree
    }]
  });
  newProfile.save((err, profile) => {
    if (err) {
       res.json({ msg: 'Failded to add profiledetails' });
    } else {
       res.json({ msg: 'successfully add profile details' });
    }
  });
});

Upvotes: 1

IftekharDani
IftekharDani

Reputation: 3729

You need to change schema definition and query.

1.remove required from schema Or apply required to those field that you must provide value.

educationinfo: [{
        universityname:
        {
            type: String,
           // required: true
        },
        degree:
        {
            type: String,
            //required: true
        },
        coursecompletionyear:
        {
            type: String,
           // required: true
        },
        collegename:
        {
            type: String,
           // required: true
        },
        specialization:
        {
            type: String,
            //required: true
        },
        marks:
        {
            type: String,
           // required: true
        },
        courselevel:
        {
            type: String,
           // required: true
        }
    }]

2.change $educationinfo with educationinfo

educationinfo:[{
    universityname:req.body.universityname,
    degree:req.body.degree
    }]

Upvotes: 1

squeekyDave
squeekyDave

Reputation: 962

The data you insert is incomplete. The properties in your schema marked as required: true need to be inserted aswell. Because you do not meet the schema requirements, it is failing.

Upvotes: 0

Related Questions