如何知道Mongoose的upsert是否创build了一个新文档?
我在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({}); }); }); });
它工作正常,但我想发送一个不同的响应客户端,如果一个新的文件已经创build(状态201与JSON在响应正文)或现有的已经更新(状态204)。
有没有办法告诉User.update
的callbackUser.update
?
使用callback函数的第三个参数:
... 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
,因此它是之前创build的。 如果它是false
,那就意味着这个新文档是在这个调用过程中创build的。