我正在尝试在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 } }
);
这是可行的,但是我缺少用户名参数,需要了解如何通过它。