Как обновить с Mon goose вложенный документ и его поля - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь в своем API NodeJS и Mon goose добавить маршрут для 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": "",
            }

С кодом, который я отправил, я получаю понедельник goose ошибка:

{
    "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 } }
         );

Это работает, но мне не хватает параметра имени пользователя, и мне нужно понять, как пройти мимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...