diff --git a/lib/connectors/memory.js b/lib/connectors/memory.js index 8f642aec..54beb03b 100644 --- a/lib/connectors/memory.js +++ b/lib/connectors/memory.js @@ -521,11 +521,15 @@ function applyFilter(filter) { // then, we attempt to emulate mongo db matching. Helps for embedded relations var dotIndex = key.indexOf('.'); var subValue = obj[key.substring(0, dotIndex)]; - if (dotIndex !== -1 && Array.isArray(subValue)) { + if (dotIndex !== -1) { var subFilter = { where: {}}; var subKey = key.substring(dotIndex + 1); subFilter.where[subKey] = where[key]; - return subValue.some(applyFilter(subFilter)); + if (Array.isArray(subValue)) { + return subValue.some(applyFilter(subFilter)); + } else if (typeof subValue === 'object' && subValue !== null) { + return applyFilter(subFilter)(subValue); + } } return false; diff --git a/test/memory.test.js b/test/memory.test.js index 50701824..7312e4d2 100644 --- a/test/memory.test.js +++ b/test/memory.test.js @@ -156,6 +156,11 @@ describe('Memory connector', function() { city: String, state: String, zipCode: String, + tags: [ + { + tag: String, + }, + ], }, friends: [ { @@ -523,6 +528,16 @@ describe('Memory connector', function() { }); }); + it('should support multi-level nested array property in query', function(done) { + User.find({ where: { 'address.tags.tag': 'business' }}, function(err, users) { + should.not.exist(err); + users.length.should.be.equal(1); + users[0].address.tags[0].tag.should.be.equal('business'); + users[0].address.tags[1].tag.should.be.equal('rent'); + done(); + }); + }); + function seed(done) { var beatles = [ { @@ -537,6 +552,10 @@ describe('Memory connector', function() { city: 'San Jose', state: 'CA', zipCode: '95131', + tags: [ + { tag: 'business' }, + { tag: 'rent' }, + ], }, friends: [ { name: 'Paul McCartney' },