更新引用集合后,最有效地检索文档的方法



我正在检索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

最新更新