diff --git a/packages/easy-mongo/src/Stages.ts b/packages/easy-mongo/src/Stages.ts index 5d897a81..99160e81 100644 --- a/packages/easy-mongo/src/Stages.ts +++ b/packages/easy-mongo/src/Stages.ts @@ -154,6 +154,7 @@ export const stages = { ifNotEmpty(excludes, es => ({ $project: es.reduce((a: Filter, b: Filter) => ({ ...a, ...(isString(b) ? { [b]: 0 } : b) }), {}) })), includes: (includes: Record)[]>) => new IncludeBuilder(includes), project: (project?: Filter) => ifDefined(project, $project => ({ $project })), + date: (key: string, format = '%Y-%m-%d') => ({ $toDate: `$${key}`, format }), }, replaceWith: { replaceWith: (f?: Filter): Optional => ifDefined(f, { $replaceWith: f }), diff --git a/packages/easy-mongo/test/Stages.test.ts b/packages/easy-mongo/test/Stages.test.ts index 9e38ad57..f8f5fba1 100644 --- a/packages/easy-mongo/test/Stages.test.ts +++ b/packages/easy-mongo/test/Stages.test.ts @@ -373,7 +373,7 @@ describe('Stages', () => { }); // Project - const { include, exclude, includes, project } = stages.project; + const { include, exclude, includes, project, date: pDate } = stages.project; test('projection include', () => { expect(include()).toBeUndefined(); @@ -411,6 +411,11 @@ describe('Stages', () => { expect(project({ name: 1, color: 1 })).toStrictEqual({ $project: { name: 1, color: 1 } }); }); + test('date', () => { + expect(pDate('created')).toStrictEqual({ $toDate: '$created', format: '%Y-%m-%d' }); + expect(pDate('created', '%Y-%m-%d %H:%M:%S')).toStrictEqual({ $toDate: '$created', format: '%Y-%m-%d %H:%M:%S' }); + }); + // ReplaceWith const { merge, reroot, concat, rootAnd, currentAnd, replaceWith } = stages.replaceWith; diff --git a/packages/easy/test/types/AnyKey.test.ts b/packages/easy/test/types/AnyKey.test.ts index 7dd6ebd8..b974b283 100644 --- a/packages/easy/test/types/AnyKey.test.ts +++ b/packages/easy/test/types/AnyKey.test.ts @@ -19,6 +19,6 @@ describe('AnyKey', () => { expect(t.toValue('name.last')).toBe('Jansen'); expect(t.toValue('name.first')).toBe('Jan'); expect(t.toValue('paid.cents')).toBe(3000); - expect(t.toValue('name.address.city')).toBe('Amsterdam'); + expect(t.toValue('name.address.country')).toBe('NL'); }); });