Reputation: 307
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
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