【问题标题】:How to push to each items inside an array of objects in mongoose?如何推送到猫鼬对象数组中的每个项目?
【发布时间】:2022-02-06 03:15:47
【问题描述】:

我正在尝试使用 Mongoose 更新数组中的每个项目。我想要的是每个受邀参加活动的用户在数组中都有创建的活动。但是在尝试 for 循环时出现错误 SyntaxError: Unexpected token '.'。有人有解决方案吗?

这是我的代码:

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))
})

其余的运行良好,只有for 循环内的这个$push 不起作用。

感谢您的回答!

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    您可以通过一个查询来更新所有这些。您不需要 for 循环。

    不要这样做:

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

    你可以这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 2019-10-13
      • 2021-02-09
      • 2019-03-22
      • 1970-01-01
      • 2016-02-28
      相关资源
      最近更新 更多