Home > Enterprise >  insert to MongoDB array with axios, restAPI and nodeJS
insert to MongoDB array with axios, restAPI and nodeJS

Time:08-30

I am trying to add an item to a MongoDB array with RESTAPI through Axios. I thought it would look similar to the push method but I have no idea how to do that.

my Model is of a person:

 const Schema = mongoose.Schema;
const PersonSchema = new Schema({
    name: String,
    password: String,
    friends: [],
    missions: []
})

const personModel = mongoose.model('Person', PersonSchema);

I want to add a mission to the mission array of a person.

and for example, in order to add a new Person, I use NodeJS and API: (api.js)

router.post('/api/people', (req, res) => {
    const personToAdd = req.body;
    const newPersonPost = new personModel(personToAdd);
    newPersonPost.save((e) => {
        if (e) {
            console.log("error");
        }
    });
    res.json({
        msg: 'Received'
    })
});

and in the client side I use Axios:

axios({
                url: 'http://localhost:8080/api/people',
                method: 'POST',
                data: dataToUpdate
            })
                .then(() => {
                    console.log('axios sent info to server');
                }).catch((e) => {
                    console.log('error'   e);
                }) 

Thank you so much!

CodePudding user response:

express

router.post('updating mission endpoint url', async (req, res) =>
try {
const query = { /* content */}; /* write a query to retrieve the concerned user by using a unique identifier */
let person = await personModel.findOne(query); 
person.missions.push(req.body.mission); 

personModel.save(); 
} catch (err) { 
console.log(err); 
} 
});

client

In the client side you just have to put the mission you want to add in data like you did above with the right endpoint url and you should add a unique identifier for the user you want to add mission to.

CodePudding user response:

[] will not assign array type to your variable.

Change your schema file with the following:

const Schema = mongoose.Schema;
const PersonSchema = new Schema({
    name: { type: String },
    password: { type: String },
    friends: { type: Array },
    missions: { type: Array }
})

CodePudding user response:

Update the db model entity file with following

First method:

const Schema = mongoose.Schema;
const PersonSchema = new Schema({
    name: String,
    password: String,
    friends: {type : Array},
    missions: {type : Array}
})

const personModel = mongoose.model('Person', PersonSchema);

Second Method :

const Schema = mongoose.Schema;
        const PersonSchema = new Schema({
            name: String,
            password: String,
            friends: [{ type: String }],
            missions: [{ type: String }]
        })
        
        const personModel = mongoose.model('Person', PersonSchema);

You can update the array object as per your requirements.

  • Related