簡體   English   中英

如何知道Mongoose的upsert是否創建了一個新文檔?

[英]How to know if Mongoose's upsert created a new document?

我在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({});
        });
    });
});

它工作正常,但我想在創建新文檔時向客戶端發送不同的響應(狀態201,響應正文中為json)或現有的已更新(狀態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 ,則表示在此調用期間創建了新文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM