如何知道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的。