@@ -11,6 +11,7 @@ import {
1111} from './filterOperators' ;
1212import type { NestedAliasesMap } from './aliases' ;
1313import { makeFieldsRecursiveNullable } from '../../utils/makeFieldsRecursiveNullable' ;
14+ import { mongoose } from 'src/__mocks__/mongooseCommon' ;
1415
1516export type FilterHelperArgsOpts = {
1617 /**
@@ -130,41 +131,52 @@ export function filterHelper(
130131) : void {
131132 const filter = resolveParams . args ?. filter ;
132133 if ( filter && typeof filter === 'object' && Object . keys ( filter ) . length > 0 ) {
133- const modelFields = ( resolveParams . query as any ) ?. schema ?. paths ;
134+ const schemaFields = ( resolveParams . query as any ) ?. schema ?. paths ;
134135
135136 const { _ids, ...filterFields } = filter ;
136137 if ( _ids && Array . isArray ( _ids ) ) {
137138 resolveParams . query = resolveParams . query . where ( { _id : { $in : _ids } } ) ;
138139 }
139140 processFilterOperators ( filterFields ) ;
140- const clearedFilter : Record < string , any > = { } ;
141- Object . keys ( filterFields ) . forEach ( ( key ) => {
142- const value = filterFields [ key ] ;
143- if ( key . startsWith ( '$' ) ) {
144- clearedFilter [ key ] = Array . isArray ( value )
145- ? value . map ( ( v ) => toMongoFilterDottedObject ( v , aliases ) )
146- : toMongoFilterDottedObject ( value , aliases ) ;
147- } else if ( modelFields [ key ] || aliases ?. [ key ] ) {
148- const alias = aliases ?. [ key ] ;
149- let newKey ;
150- let subAlias : NestedAliasesMap | undefined ;
151- if ( typeof alias === 'string' ) {
152- newKey = alias ;
153- } else if ( isObject ( alias ) ) {
154- subAlias = alias ;
155- newKey = alias ?. __selfAlias ;
156- } else {
157- newKey = key ;
158- }
159- toMongoFilterDottedObject ( value , subAlias , clearedFilter , newKey ) ;
160- }
161- } ) ;
162- if ( Object . keys ( clearedFilter ) . length > 0 ) {
163- resolveParams . query = resolveParams . query . where ( clearedFilter ) ;
141+ const mongooseFilter = convertFilterFields ( filterFields , schemaFields , aliases ) ;
142+
143+ if ( Object . keys ( mongooseFilter ) . length > 0 ) {
144+ resolveParams . query = resolveParams . query . where ( mongooseFilter ) ;
164145 }
165146 }
166147
167148 if ( isObject ( resolveParams . rawQuery ) ) {
168149 resolveParams . query = resolveParams . query . where ( resolveParams . rawQuery ) ;
169150 }
170151}
152+
153+ function convertFilterFields (
154+ filterFields : Record < string , any > ,
155+ schemaFields : { [ key : string ] : mongoose . SchemaType } ,
156+ aliases ?: NestedAliasesMap
157+ ) {
158+ const clearedFilter : Record < string , any > = { } ;
159+ Object . keys ( filterFields ) . forEach ( ( key ) => {
160+ const value = filterFields [ key ] ;
161+ if ( key . startsWith ( '$' ) ) {
162+ clearedFilter [ key ] = Array . isArray ( value )
163+ ? value . map ( ( v ) => toMongoFilterDottedObject ( v , aliases ) )
164+ : toMongoFilterDottedObject ( value , aliases ) ;
165+ } else if ( schemaFields [ key ] || aliases ?. [ key ] || isObject ( value ) ) {
166+ const alias = aliases ?. [ key ] ;
167+ let newKey ;
168+ let subAlias : NestedAliasesMap | undefined ;
169+ if ( typeof alias === 'string' ) {
170+ newKey = alias ;
171+ } else if ( isObject ( alias ) ) {
172+ subAlias = alias ;
173+ newKey = alias ?. __selfAlias ;
174+ } else {
175+ newKey = key ;
176+ }
177+ toMongoFilterDottedObject ( value , subAlias , clearedFilter , newKey ) ;
178+ }
179+ } ) ;
180+
181+ return clearedFilter ;
182+ }
0 commit comments