在PUT中避免使用Mongo和Express进行额外的查询

我正在用Mongoose / Express更新Mongo中的logging:

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()的callback中做第二个查询,似乎很多只是返回新的更新的文档。

如果您总是只更新一个文档,则可以使用findByIdAndUpdate (或findOneAndUpdate),如果find该文档,它将更新文档并将其返回给callback:

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

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

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

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

我也有时做User.Find(),然后在成功callbackDoc.save()。 这可以让你做更复杂的事情,如果它不是从请求直接更新。