我正在检索User
文档并更新引用的评估对象和更新它。现在,用户有一个更新的参考,我再次搜索该用户,以获取具有更新的Assessment
参考的User
文档。更新Assessment
之后,是否有一种更有效的方法来拉出User
文档?
router.post(
"/post",
passport.authenticate("jwt", { session: false }),
(req, res) => {
User.findOne({ _id: req.user._id }).then(user => {
Assessment.findOneAndUpdate(
{ _id: user.assessment._id },
{
$set: {
post: {
q1: {
question: req.body.q1.question,
answer: req.body.q1.answer
}
},
{
new: true
}
)
.then(assessment => {
User.findOne( <--- In question, trying to avoid querying the DB again
{ _id: req.user._id },
"name account_type corporation district email securityQuestions videos, assessment"
)
.lean()
.populate("assessment")
.then(user => res.json(user));
})
.catch(() => res.json({ Error: "Cannot update assessment" }));
您已经使Assessment.findOneAndUpdate
通过设置{new: true}
返回更新的文档,因此不需要再次查询,并且您也已经获得了用户文档并将其组合在一起。
router.post(
"/post",
passport.authenticate("jwt", {
session: false
}),
async (req, res) => {
try {
let userDoc = await User.findOne({
_id: req.user._id
});
let assesmentDoc = await Assessment.findOneAndUpdate({
_id: userDoc.assessment._id
}, {
$set: {
post: {
q1: {
question: req.body.q1.question,
answer: req.body.q1.answer
}
}
}
}, {
new: true
});
userDoc.assesment = assesmentDoc;
res.json(userDoc);
} catch (error) {
res.json({
error: "Cannot update assessment"
});
}
});
参考:FindOneAndupDate