JulSeb42
JulSeb42

Reputation: 307

How to push to each items inside an array of objects in mongoose?

I'm trying to update every item inside an array with Mongoose. What I would like to have is that each user invited to an event has the created event inside an array. But I'm getting an error SyntaxError: Unexpected token '.' when trying a for loop. Does someone have a solution?

This is my code:

router.post("/new-event", (req, res, next) => {
    const {
        title,
        organiser,
        invitedPeople,
    } = req.body

    Event.create({
        title,
        organiser,
        invitedPeople,
    })
        .then(createdEvent => {
            User.findByIdAndUpdate(
                organiser,
                { $push: { organisedEvents: createdEvent } },
                { new: true }
            ).then(updatedUser => {
                for (let i = 0; i < invitedPeople.length; i++) {
                    User.findByIdAndUpdate(
                        invitedPeople[i],
                        { $push: { invitedEvents: createdEvent } },
                        { new: true }
                    )
                }
                    .then(updatedUsers => {
                        res.status(200).json({
                            user: updatedUser,
                            createdEvent,
                            updatedUsers,
                        })
                    })
            })
        })
        .catch(err => next(err))
})

The rest is working well, only this $push inside the for loop does not work.

Thanks for your answers!

Upvotes: 1

Views: 312

Answers (1)

NeNaD
NeNaD

Reputation: 20304

You can update all of them with one query. You don't need a for loop.

Instead of doing this:

 for (let i = 0; i < invitedPeople.length; i++) {
  User.findByIdAndUpdate(
   invitedPeople[i],
    { $push: { invitedEvents: createdEvent } },
    { new: true }
  )
 }

You can do this:

User.update(
  { _id: { "$in": invitedPeople }},
  { $push: { invitedEvents: createdEvent } },
  { new: true }
)

Upvotes: 1

Related Questions