如何知道 Mongoose 的 upsert 是否创建了新文档?

2024-04-05

我在 node.js/express.js 中有这段代码:

var User = mongoose.model('User');
var usersRouter = express.Router();
usersRouter.put('/:id', function(req, res) {
    req.body._id = req.params.id;
    var usr = new User(req.body);

    usr.validate(function (err) {
        if (err) {
            res.status(400).json({});
            return;
        }

        var upsertData = usr.toObject();
        delete upsertData._id;

        User.update({_id: usr._id}, upsertData, {upsert: true}, function(err) {
            if (err) {
                res.status(500).json({});
                return;
            }

            res.status(204).json({});
        });
    });
});

它工作正常,但如果已创建新文档(响应正文中带有 json 的状态 201)或已更新现有文档(状态 204),我想向客户端发送不同的响应。

有没有办法区分回调User.update?


使用回调函数的第三个参数:

...
User.update({_id: usr._id}, upsertData, {upsert: true}, function(err, num, n) {
  if (err) {
     res.status(500).json({});
     return;
   }

   if (!n.updatedExisting) { 
       /* new document */
   }

   res.status(204).json({});
});
...

n是一个像这样的对象:

{ updatedExisting: false,
  upserted: <ObjectId>,
  n: 1,
  connectionId: 11,
  err: null,
  ok: 1 }

updatedExisting财产是true当一个文档已更新——所以它是之前创建的。如果它是false,那么这意味着新文档是在本次调用期间创建的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何知道 Mongoose 的 upsert 是否创建了新文档? 的相关文章

随机推荐