skip to Main Content

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!

4

Answers


  1. 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.

    Login or Signup to reply.
  2. [] 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 }
    })
    
    Login or Signup to reply.
  3. 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.

    Login or Signup to reply.
  4. You just want to be using the $push update operator, very simple, like so:

    db.collection.updateOne(
    {
      _id: user._id
    },
    {
      "$push": {
        "missions": {
          mission: newMission
        }
      }
    })
    

    Mongo Playground

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search