diff --git a/packages/strapi-generate-api/templates/mongoose/service.template b/packages/strapi-generate-api/templates/mongoose/service.template index f9d4bcb4cf..62bb9045e3 100644 --- a/packages/strapi-generate-api/templates/mongoose/service.template +++ b/packages/strapi-generate-api/templates/mongoose/service.template @@ -30,12 +30,7 @@ module.exports = { const matchStage = hook.load().generateMatchStage(<%= globalID %>, filters); // Nested relation filter const aggregateStages = mergeStages(populateStage, matchStage); - const result = <%= globalID %>.aggregate([ - { - $match: filters.where, // Direct relation filter - }, - ...aggregateStages - ]) + const result = <%= globalID %>.aggregate(aggregateStages) .skip(filters.start) .limit(filters.limit); diff --git a/packages/strapi-plugin-users-permissions/config/queries/mongoose.js b/packages/strapi-plugin-users-permissions/config/queries/mongoose.js index 35a7adc2aa..88e988ed95 100644 --- a/packages/strapi-plugin-users-permissions/config/queries/mongoose.js +++ b/packages/strapi-plugin-users-permissions/config/queries/mongoose.js @@ -10,12 +10,7 @@ module.exports = { const matchStage = hook.load().generateMatchStage(this, filters); // Nested relation filter const aggregateStages = mergeStages(populateStage, matchStage); - const result = this.aggregate([ - { - $match: filters.where || {}, // Direct relation filter - }, - ...aggregateStages - ]); + const result = this.aggregate(aggregateStages); if (_.has(filters, 'start')) result.skip(filters.start); if (_.has(filters, 'limit')) result.limit(filters.limit); diff --git a/packages/strapi-utils/lib/models.js b/packages/strapi-utils/lib/models.js index 5766febb69..ec80dc1658 100644 --- a/packages/strapi-utils/lib/models.js +++ b/packages/strapi-utils/lib/models.js @@ -364,7 +364,7 @@ module.exports = { filter: details.filter, }; - if (infos.nature === 'manyToMany' && !association.plugin && definition.orm === 'bookshelf') { + if (infos.nature === 'manyToMany' && definition.orm === 'bookshelf') { ast.tableCollectionName = this.getCollectionName(association, details); } @@ -453,6 +453,7 @@ module.exports = { this.processValues({ model, models, convertor, postProcessValue }), this.processPredicates({ model, models, convertor }), this.processGeneratedResults(), + this.mergeWhereAndRelationPayloads() ])(_filter); }, @@ -680,5 +681,17 @@ module.exports = { return updatedFilter; }); }; + }, + + mergeWhereAndRelationPayloads: function() { + return filter => { + return { + ...filter, // Normally here we need to omit where key + relations: { + ...filter.where, + relations: filter.relations + } + }; + }; } };