【问题标题】:Avoid extra query with Mongo and Express in PUT避免在 PUT 中使用 Mongo 和 Express 进行额外查询
【发布时间】:2013-06-22 01:18:25
【问题描述】:

我正在使用 Mongoose/Express 更新 Mongo 中的记录:

app.put('/loggedIn/:id', function(req, res) {
  if (req.user._id == req.params.id) {
    User.update({
      _id: req.user._id
    }, {
      $set: {
        interests: req.body.interests
      }
    }, function(err, num) {
      if (err) return err;
      User.findById(req.user._id, '_id username interests', function(err, user) {
        if (err) return;
        res.json(user);
      });
    });
  } else {
    console.log('fail');
  }

});

如何避免在update()的回调中进行第二次查询,似乎只是为了返回新更新的文档。

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    我认为您可以将原始 Mongo 响应作为第三个更新回调参数。检查这是否包含您想要的内容。否则,请尝试传递选项 { raw: true }。

    http://mongodb.github.io/node-mongodb-native/markdown-docs/insert.html

    【讨论】:

      【解决方案2】:

      如果您总是只更新一个文档,您可以使用findByIdAndUpdate(或 findOneAndUpdate),它会在找到文档时更新文档并将其返回给回调:

      app.put('/loggedIn/:id', function(req, res) {
        if (req.user._id == req.params.id) {
          User.findByIdAndUpdate(req.user._id, {
            $set: {
              interests: req.body.interests
            }
          }, function(err, user) {
            if (err) return;
            res.json(user);
          });
        } else {
          console.log('fail');
        }
      
      });
      

      【讨论】:

        【解决方案3】:

        您可以使用findByIdAndUpdate 而不是单独的查找和更新。

        【讨论】:

          【解决方案4】:

          我有时也会执行 User.Find(),然后在成功回调 Doc.save() 中执行。如果它不仅仅是来自请求的直接更新,那么您可以在两者之间做更复杂的事情。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-06-25
            • 1970-01-01
            • 2020-02-10
            • 2012-01-26
            • 1970-01-01
            • 1970-01-01
            • 2022-07-05
            • 1970-01-01
            相关资源
            最近更新 更多