diff --git a/lib/dao.js b/lib/dao.js index f800d79c..3444fc5f 100644 --- a/lib/dao.js +++ b/lib/dao.js @@ -21,6 +21,7 @@ var setScopeValuesFromWhere = utils.setScopeValuesFromWhere; var mergeQuery = utils.mergeQuery; var util = require('util'); var assert = require('assert'); +var Model = require('./model'); /** * Base class for all persistent objects. @@ -593,6 +594,10 @@ DataAccessObject._coerce = function (where) { continue; } + if (DataType.prototype instanceof Model) { + continue; + } + if (DataType === geo.GeoPoint) { // Skip the GeoPoint as the near operator breaks the assumption that // an operation has only one property diff --git a/test/datatype.test.js b/test/datatype.test.js index 13f83a20..b4761ffa 100644 --- a/test/datatype.test.js +++ b/test/datatype.test.js @@ -7,13 +7,16 @@ describe('datatypes', function () { before(function (done) { db = getSchema(); + Nested = db.define('Nested', {}); + Model = db.define('Model', { str: String, date: Date, num: Number, bool: Boolean, list: {type: [String]}, - arr: Array + arr: Array, + nested: Nested }); db.automigrate(function () { Model.destroyAll(done); @@ -114,4 +117,10 @@ describe('datatypes', function () { }); } }); + + it('should not coerce nested objects into ModelConstructor types', function() { + var coerced = Model._coerce({ nested: { foo: 'bar' } }); + coerced.nested.constructor.name.should.equal('Object'); + }); + });