Merge pull request #1027 from pponugo/2.x

Support nested queries for arrays

Close #1027
This commit is contained in:
Miroslav Bajtoš 2016-09-07 13:26:02 +02:00
commit d385dfa9d6
2 changed files with 25 additions and 2 deletions

View File

@ -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];
if (Array.isArray(subValue)) {
return subValue.some(applyFilter(subFilter));
} else if (typeof subValue === 'object' && subValue !== null) {
return applyFilter(subFilter)(subValue);
}
}
return false;

View File

@ -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' },