diff --git a/packages/database/src/__tests__/operator/string-operator.test.ts b/packages/database/src/__tests__/operator/string-operator.test.ts index b07c00ffb..d3bc960d7 100644 --- a/packages/database/src/__tests__/operator/string-operator.test.ts +++ b/packages/database/src/__tests__/operator/string-operator.test.ts @@ -39,4 +39,24 @@ describe('string operator', () => { expect(u1Res.get('id')).toEqual(u1.get('id')); }); + + it('should query with and ', async () => { + const u1 = await db.getRepository('users').create({ + values: { + name: 'names of u1', + }, + }); + + const u1Res = await db.getRepository('users').findOne({ + filter: { + $and: [ + { + 'name.$includes': 'u1', + }, + ], + }, + }); + + expect(u1Res.get('id')).toEqual(u1.get('id')); + }); }); diff --git a/packages/database/src/filter-parser.ts b/packages/database/src/filter-parser.ts index e40e35108..4a21935ce 100644 --- a/packages/database/src/filter-parser.ts +++ b/packages/database/src/filter-parser.ts @@ -1,4 +1,4 @@ -import { flatten } from 'flat'; +import { flatten, unflatten } from 'flat'; import { default as lodash, default as _ } from 'lodash'; import { ModelCtor } from 'sequelize'; import { Collection } from './collection'; @@ -121,7 +121,7 @@ export default class FilterParser { } else if (typeof opKey === 'function') { skipPrefix = origins.join('.'); - value = opKey(originalFiler[skipPrefix], { + value = opKey(lodash.get(unflatten(originalFiler), skipPrefix), { db: this.database, path: skipPrefix, fieldName: skipPrefix.replace(`.${firstKey}`, ''),