From 7cb3881c5aec7311c20440de01ee97f12383a62f Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Wed, 1 Apr 2015 14:57:59 -0700 Subject: [PATCH 1/2] Update deps --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9b6157020..fe5b2deff 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "bluebird": "^2.9.12", "loopback-datasource-juggler": "^2.15.0", "mocha": "^2.1.0", - "rc": "^0.6.0", + "rc": "^1.0.0", "semver": "^4.2.0", "should": "^5.0.0" }, From e52511711643500ffab7a38efd49d7123590d71c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Bajto=C5=A1?= Date: Wed, 1 Apr 2015 18:27:51 +0200 Subject: [PATCH 2/2] Support `ctx.isNewInstance` Modify the following two DAO methods to report back whether a new instance was created: - updateOrCreate - save --- lib/mongodb.js | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/mongodb.js b/lib/mongodb.js index b7b050f2f..fa4b59327 100644 --- a/lib/mongodb.js +++ b/lib/mongodb.js @@ -246,7 +246,24 @@ MongoDB.prototype.save = function (model, data, callback) { if (self.debug) { debug('save.callback', model, err, result); } - callback && callback(err, result && result.ops); + + var info = {}; + if (result && result.result) { + // create result formats: + // { ok: 1, n: 1, upserted: [ [Object] ] } + // { ok: 1, nModified: 0, n: 1, upserted: [ [Object] ] } + // + // update result formats: + // { ok: 1, n: 1 } + // { ok: 1, nModified: 1, n: 1 } + if (result.result.ok === 1 && result.result.n === 1) { + info.isNewInstance = !!result.result.upserted; + } else { + debug('save result format not recognized: %j', result.result); + } + } + + callback && callback(err, result && result.ops, info); }); }; @@ -388,7 +405,15 @@ MongoDB.prototype.updateOrCreate = function updateOrCreate(model, data, callback self.setIdValue(model, object, id); object && idName !== '_id' && delete object._id; } - callback && callback(err, object); + + var info; + if (result && result.lastErrorObject) { + info = { isNewInstance: !result.lastErrorObject.updatedExisting }; + } else { + debug('updateOrCreate result format not recognized: %j', result); + } + + callback && callback(err, object, info); }); }; @@ -864,7 +889,7 @@ MongoDB.prototype.automigrate = function (models, cb) { } self.db.dropCollection(model, function (err, collection) { if(err) { - if(!(err.name === 'MongoError' && err.ok === 0 + if(!(err.name === 'MongoError' && err.ok === 0 && err.errmsg === 'ns not found')) { // For errors other than 'ns not found' (collection doesn't exist) return modelCallback(err);