如何使用Mongoose更新嵌套文档及其字段

时间:2020-01-23 14:58:06

标签: node.js mongodb mongoose

我正在尝试在NodeJS和Mongoose API中添加一条路由来对嵌套文档的记录进行PUT / UPDATE。 我的个人资料包含嵌入的经验,我的目标是为一种个人资料更新一种经验。 这是路线:

experienceRouter.put("/:username/experience/:expId", async (req, res) => {
    try {
        // const experienceToEdit = await Profiles.findOne(
        //     { "experience._id": req.params.expId },
        //     { _id: 0, "experience.$": 1 },
        //     { $set: { ...req.body } }
        // );

        const experienceToEdit = await Profiles.findOneAndUpdate(
            {
                username: req.params.username
            },
            {
                experience: req.params.expId
            },
            { "experience.$": 1, username: 1, _id: 0 },
            { $set: { ...req.body } }
        ).lean();

        if (experienceToEdit)
            res.send({ Message: "Update", experience: req.body });
        res.status(404).send("Not found");
    } catch (err) {
        res.status(500).send(err);
    }
}); 

我必须首先与用户名匹配,然后找到expId并更新该体验。 我将字段发送为req.body

请求示例:

"experience": {
                "_id": "5e26ff6d5be84a3aeeb2f7bc",
                "title": "Senior Dev",
                "role": "Dev",
                "company": "ArosaDev",
                "startDate": "2018-12-03T23:00:00.000Z",
                "endDate": null,
                "description": "",
                "area": "",
            }

使用我发布的代码,我遇到了Mongoose错误:

{
    "message": "Callback must be a function, got [object Object]",
    "name": "MongooseError"
}

如果不这样做,我不知道如何在公式中包含用户名:

    const experienceToEdit = await Profiles.findOne(
             { "experience._id": req.params.expId },
             { _id: 0, "experience.$": 1 },
             { $set: { ...req.body } }
         );

这是可行的,但是我缺少用户名参数,需要了解如何通过它。

0 个答案:

没有答案