1

I'm updating a record in Mongo with Mongoose/Express:

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');
  }

});

How can I avoid doing the second query in the callback of the update(), seems a lot just to return the newly updated document.

4

4 回答 4

6

如果您总是只更新一个文档,您可以使用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');
  }

});
于 2013-06-25T09:54:37.137 回答
0

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

于 2013-06-25T09:55:29.433 回答
0

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

于 2014-08-08T21:12:51.030 回答
0

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

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

于 2013-06-25T09:52:39.433 回答