@payloadcms/db-mongodb 3.30.0-internal.ef2a0e5 → 3.31.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../src/find.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAenC,eAAO,MAAM,IAAI,EAAE,IAmJlB,CAAA"}
1
+ {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../src/find.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAenC,eAAO,MAAM,IAAI,EAAE,IAqJlB,CAAA"}
package/dist/find.js CHANGED
@@ -7,7 +7,7 @@ import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect
7
7
  import { getCollection } from './utilities/getEntity.js';
8
8
  import { getSession } from './utilities/getSession.js';
9
9
  import { transform } from './utilities/transform.js';
10
- export const find = async function find({ collection: collectionSlug, joins = {}, limit = 0, locale, page, pagination, projection, req, select, sort: sortArg, where = {} }) {
10
+ export const find = async function find({ collection: collectionSlug, draftsEnabled, joins = {}, limit = 0, locale, page, pagination, projection, req, select, sort: sortArg, where = {} }) {
11
11
  const { collectionConfig, Model } = getCollection({
12
12
  adapter: this,
13
13
  collectionSlug
@@ -94,6 +94,7 @@ export const find = async function find({ collection: collectionSlug, joins = {}
94
94
  adapter: this,
95
95
  collection: collectionSlug,
96
96
  collectionConfig,
97
+ draftsEnabled,
97
98
  joins,
98
99
  locale,
99
100
  query
package/dist/find.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/find.ts"],"sourcesContent":["import type { PaginateOptions, PipelineStage } from 'mongoose'\nimport type { Find } from 'payload'\n\nimport { flattenWhereToOperators } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { aggregatePaginate } from './utilities/aggregatePaginate.js'\nimport { buildJoinAggregation } from './utilities/buildJoinAggregation.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { transform } from './utilities/transform.js'\n\nexport const find: Find = async function find(\n this: MongooseAdapter,\n {\n collection: collectionSlug,\n joins = {},\n limit = 0,\n locale,\n page,\n pagination,\n projection,\n req,\n select,\n sort: sortArg,\n where = {},\n },\n) {\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n\n const session = await getSession(this, req)\n\n let hasNearConstraint = false\n\n if (where) {\n const constraints = flattenWhereToOperators(where)\n hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'))\n }\n\n const sortAggregation: PipelineStage[] = []\n\n let sort\n if (!hasNearConstraint) {\n sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n locale,\n sort: sortArg || collectionConfig.defaultSort,\n sortAggregation,\n timestamps: true,\n })\n }\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.\n const useEstimatedCount = hasNearConstraint || !query || Object.keys(query).length === 0\n const paginationOptions: PaginateOptions = {\n lean: true,\n leanWithId: true,\n options: {\n session,\n },\n page,\n pagination,\n projection,\n sort,\n useEstimatedCount,\n }\n\n if (select) {\n paginationOptions.projection = buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n })\n }\n\n if (this.collation) {\n const defaultLocale = 'en'\n paginationOptions.collation = {\n locale: locale && locale !== 'all' && locale !== '*' ? locale : defaultLocale,\n ...this.collation,\n }\n }\n\n if (!useEstimatedCount && Object.keys(query).length === 0 && this.disableIndexHints !== true) {\n // Improve the performance of the countDocuments query which is used if useEstimatedCount is set to false by adding\n // a hint. By default, if no hint is provided, MongoDB does not use an indexed field to count the returned documents,\n // which makes queries very slow. This only happens when no query (filter) is provided. If one is provided, it uses\n // the correct indexed field\n paginationOptions.useCustomCountFn = () => {\n return Promise.resolve(\n Model.countDocuments(query, {\n hint: { _id: 1 },\n session,\n }),\n )\n }\n }\n\n if (limit >= 0) {\n paginationOptions.limit = limit\n // limit must also be set here, it's ignored when pagination is false\n\n paginationOptions.options!.limit = limit\n\n // Disable pagination if limit is 0\n if (limit === 0) {\n paginationOptions.pagination = false\n }\n }\n\n let result\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n collection: collectionSlug,\n collectionConfig,\n joins,\n locale,\n query,\n })\n\n if (aggregate || sortAggregation.length > 0) {\n result = await aggregatePaginate({\n adapter: this,\n collation: paginationOptions.collation,\n joinAggregation: aggregate,\n limit: paginationOptions.limit,\n Model,\n page: paginationOptions.page,\n pagination: paginationOptions.pagination,\n projection: paginationOptions.projection,\n query,\n session: paginationOptions.options?.session ?? undefined,\n sort: paginationOptions.sort as object,\n sortAggregation,\n useEstimatedCount: paginationOptions.useEstimatedCount,\n })\n } else {\n result = await Model.paginate(query, paginationOptions)\n }\n\n transform({\n adapter: this,\n data: result.docs,\n fields: collectionConfig.fields,\n operation: 'read',\n })\n\n return result\n}\n"],"names":["flattenWhereToOperators","buildQuery","buildSortParam","aggregatePaginate","buildJoinAggregation","buildProjectionFromSelect","getCollection","getSession","transform","find","collection","collectionSlug","joins","limit","locale","page","pagination","projection","req","select","sort","sortArg","where","collectionConfig","Model","adapter","session","hasNearConstraint","constraints","some","prop","Object","keys","key","sortAggregation","config","payload","fields","flattenedFields","defaultSort","timestamps","query","useEstimatedCount","length","paginationOptions","lean","leanWithId","options","collation","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","aggregate","joinAggregation","undefined","paginate","data","docs","operation"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/find.ts"],"sourcesContent":["import type { PaginateOptions, PipelineStage } from 'mongoose'\nimport type { Find } from 'payload'\n\nimport { flattenWhereToOperators } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { buildSortParam } from './queries/buildSortParam.js'\nimport { aggregatePaginate } from './utilities/aggregatePaginate.js'\nimport { buildJoinAggregation } from './utilities/buildJoinAggregation.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { transform } from './utilities/transform.js'\n\nexport const find: Find = async function find(\n this: MongooseAdapter,\n {\n collection: collectionSlug,\n draftsEnabled,\n joins = {},\n limit = 0,\n locale,\n page,\n pagination,\n projection,\n req,\n select,\n sort: sortArg,\n where = {},\n },\n) {\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n\n const session = await getSession(this, req)\n\n let hasNearConstraint = false\n\n if (where) {\n const constraints = flattenWhereToOperators(where)\n hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near'))\n }\n\n const sortAggregation: PipelineStage[] = []\n\n let sort\n if (!hasNearConstraint) {\n sort = buildSortParam({\n adapter: this,\n config: this.payload.config,\n fields: collectionConfig.flattenedFields,\n locale,\n sort: sortArg || collectionConfig.defaultSort,\n sortAggregation,\n timestamps: true,\n })\n }\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n // useEstimatedCount is faster, but not accurate, as it ignores any filters. It is thus set to true if there are no filters.\n const useEstimatedCount = hasNearConstraint || !query || Object.keys(query).length === 0\n const paginationOptions: PaginateOptions = {\n lean: true,\n leanWithId: true,\n options: {\n session,\n },\n page,\n pagination,\n projection,\n sort,\n useEstimatedCount,\n }\n\n if (select) {\n paginationOptions.projection = buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n })\n }\n\n if (this.collation) {\n const defaultLocale = 'en'\n paginationOptions.collation = {\n locale: locale && locale !== 'all' && locale !== '*' ? locale : defaultLocale,\n ...this.collation,\n }\n }\n\n if (!useEstimatedCount && Object.keys(query).length === 0 && this.disableIndexHints !== true) {\n // Improve the performance of the countDocuments query which is used if useEstimatedCount is set to false by adding\n // a hint. By default, if no hint is provided, MongoDB does not use an indexed field to count the returned documents,\n // which makes queries very slow. This only happens when no query (filter) is provided. If one is provided, it uses\n // the correct indexed field\n paginationOptions.useCustomCountFn = () => {\n return Promise.resolve(\n Model.countDocuments(query, {\n hint: { _id: 1 },\n session,\n }),\n )\n }\n }\n\n if (limit >= 0) {\n paginationOptions.limit = limit\n // limit must also be set here, it's ignored when pagination is false\n\n paginationOptions.options!.limit = limit\n\n // Disable pagination if limit is 0\n if (limit === 0) {\n paginationOptions.pagination = false\n }\n }\n\n let result\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n collection: collectionSlug,\n collectionConfig,\n draftsEnabled,\n joins,\n locale,\n query,\n })\n\n if (aggregate || sortAggregation.length > 0) {\n result = await aggregatePaginate({\n adapter: this,\n collation: paginationOptions.collation,\n joinAggregation: aggregate,\n limit: paginationOptions.limit,\n Model,\n page: paginationOptions.page,\n pagination: paginationOptions.pagination,\n projection: paginationOptions.projection,\n query,\n session: paginationOptions.options?.session ?? undefined,\n sort: paginationOptions.sort as object,\n sortAggregation,\n useEstimatedCount: paginationOptions.useEstimatedCount,\n })\n } else {\n result = await Model.paginate(query, paginationOptions)\n }\n\n transform({\n adapter: this,\n data: result.docs,\n fields: collectionConfig.fields,\n operation: 'read',\n })\n\n return result\n}\n"],"names":["flattenWhereToOperators","buildQuery","buildSortParam","aggregatePaginate","buildJoinAggregation","buildProjectionFromSelect","getCollection","getSession","transform","find","collection","collectionSlug","draftsEnabled","joins","limit","locale","page","pagination","projection","req","select","sort","sortArg","where","collectionConfig","Model","adapter","session","hasNearConstraint","constraints","some","prop","Object","keys","key","sortAggregation","config","payload","fields","flattenedFields","defaultSort","timestamps","query","useEstimatedCount","length","paginationOptions","lean","leanWithId","options","collation","defaultLocale","disableIndexHints","useCustomCountFn","Promise","resolve","countDocuments","hint","_id","result","aggregate","joinAggregation","undefined","paginate","data","docs","operation"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../src/findOne.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAYtC,eAAO,MAAM,OAAO,EAAE,OA6DrB,CAAA"}
1
+ {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../src/findOne.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAYtC,eAAO,MAAM,OAAO,EAAE,OA8DrB,CAAA"}
package/dist/findOne.js CHANGED
@@ -5,7 +5,7 @@ import { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect
5
5
  import { getCollection } from './utilities/getEntity.js';
6
6
  import { getSession } from './utilities/getSession.js';
7
7
  import { transform } from './utilities/transform.js';
8
- export const findOne = async function findOne({ collection: collectionSlug, joins, locale, req, select, where = {} }) {
8
+ export const findOne = async function findOne({ collection: collectionSlug, draftsEnabled, joins, locale, req, select, where = {} }) {
9
9
  const { collectionConfig, Model } = getCollection({
10
10
  adapter: this,
11
11
  collectionSlug
@@ -31,6 +31,7 @@ export const findOne = async function findOne({ collection: collectionSlug, join
31
31
  adapter: this,
32
32
  collection: collectionSlug,
33
33
  collectionConfig,
34
+ draftsEnabled,
34
35
  joins,
35
36
  locale,
36
37
  projection,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/findOne.ts"],"sourcesContent":["import type { AggregateOptions, QueryOptions } from 'mongoose'\n\nimport { type FindOne } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { aggregatePaginate } from './utilities/aggregatePaginate.js'\nimport { buildJoinAggregation } from './utilities/buildJoinAggregation.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { transform } from './utilities/transform.js'\n\nexport const findOne: FindOne = async function findOne(\n this: MongooseAdapter,\n { collection: collectionSlug, joins, locale, req, select, where = {} },\n) {\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n\n const session = await getSession(this, req)\n const options: AggregateOptions & QueryOptions = {\n lean: true,\n session,\n }\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n const projection = buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n })\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n collection: collectionSlug,\n collectionConfig,\n joins,\n locale,\n projection,\n query,\n })\n\n let doc\n if (aggregate) {\n const { docs } = await aggregatePaginate({\n adapter: this,\n joinAggregation: aggregate,\n limit: 1,\n Model,\n pagination: false,\n projection,\n query,\n session,\n })\n doc = docs[0]\n } else {\n ;(options as Record<string, unknown>).projection = projection\n doc = await Model.findOne(query, {}, options)\n }\n\n if (!doc) {\n return null\n }\n\n transform({ adapter: this, data: doc, fields: collectionConfig.fields, operation: 'read' })\n\n return doc\n}\n"],"names":["buildQuery","aggregatePaginate","buildJoinAggregation","buildProjectionFromSelect","getCollection","getSession","transform","findOne","collection","collectionSlug","joins","locale","req","select","where","collectionConfig","Model","adapter","session","options","lean","query","fields","flattenedFields","projection","aggregate","doc","docs","joinAggregation","limit","pagination","data","operation"],"mappings":"AAMA,SAASA,UAAU,QAAQ,0BAAyB;AACpD,SAASC,iBAAiB,QAAQ,mCAAkC;AACpE,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,aAAa,QAAQ,2BAA0B;AACxD,SAASC,UAAU,QAAQ,4BAA2B;AACtD,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,UAAmB,eAAeA,QAE7C,EAAEC,YAAYC,cAAc,EAAEC,KAAK,EAAEC,MAAM,EAAEC,GAAG,EAAEC,MAAM,EAAEC,QAAQ,CAAC,CAAC,EAAE;IAEtE,MAAM,EAAEC,gBAAgB,EAAEC,KAAK,EAAE,GAAGZ,cAAc;QAAEa,SAAS,IAAI;QAAER;IAAe;IAElF,MAAMS,UAAU,MAAMb,WAAW,IAAI,EAAEO;IACvC,MAAMO,UAA2C;QAC/CC,MAAM;QACNF;IACF;IAEA,MAAMG,QAAQ,MAAMrB,WAAW;QAC7BiB,SAAS,IAAI;QACbR;QACAa,QAAQP,iBAAiBQ,eAAe;QACxCZ;QACAG;IACF;IAEA,MAAMU,aAAarB,0BAA0B;QAC3Cc,SAAS,IAAI;QACbK,QAAQP,iBAAiBQ,eAAe;QACxCV;IACF;IAEA,MAAMY,YAAY,MAAMvB,qBAAqB;QAC3Ce,SAAS,IAAI;QACbT,YAAYC;QACZM;QACAL;QACAC;QACAa;QACAH;IACF;IAEA,IAAIK;IACJ,IAAID,WAAW;QACb,MAAM,EAAEE,IAAI,EAAE,GAAG,MAAM1B,kBAAkB;YACvCgB,SAAS,IAAI;YACbW,iBAAiBH;YACjBI,OAAO;YACPb;YACAc,YAAY;YACZN;YACAH;YACAH;QACF;QACAQ,MAAMC,IAAI,CAAC,EAAE;IACf,OAAO;;QACHR,QAAoCK,UAAU,GAAGA;QACnDE,MAAM,MAAMV,MAAMT,OAAO,CAACc,OAAO,CAAC,GAAGF;IACvC;IAEA,IAAI,CAACO,KAAK;QACR,OAAO;IACT;IAEApB,UAAU;QAAEW,SAAS,IAAI;QAAEc,MAAML;QAAKJ,QAAQP,iBAAiBO,MAAM;QAAEU,WAAW;IAAO;IAEzF,OAAON;AACT,EAAC"}
1
+ {"version":3,"sources":["../src/findOne.ts"],"sourcesContent":["import type { AggregateOptions, QueryOptions } from 'mongoose'\n\nimport { type FindOne } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { buildQuery } from './queries/buildQuery.js'\nimport { aggregatePaginate } from './utilities/aggregatePaginate.js'\nimport { buildJoinAggregation } from './utilities/buildJoinAggregation.js'\nimport { buildProjectionFromSelect } from './utilities/buildProjectionFromSelect.js'\nimport { getCollection } from './utilities/getEntity.js'\nimport { getSession } from './utilities/getSession.js'\nimport { transform } from './utilities/transform.js'\n\nexport const findOne: FindOne = async function findOne(\n this: MongooseAdapter,\n { collection: collectionSlug, draftsEnabled, joins, locale, req, select, where = {} },\n) {\n const { collectionConfig, Model } = getCollection({ adapter: this, collectionSlug })\n\n const session = await getSession(this, req)\n const options: AggregateOptions & QueryOptions = {\n lean: true,\n session,\n }\n\n const query = await buildQuery({\n adapter: this,\n collectionSlug,\n fields: collectionConfig.flattenedFields,\n locale,\n where,\n })\n\n const projection = buildProjectionFromSelect({\n adapter: this,\n fields: collectionConfig.flattenedFields,\n select,\n })\n\n const aggregate = await buildJoinAggregation({\n adapter: this,\n collection: collectionSlug,\n collectionConfig,\n draftsEnabled,\n joins,\n locale,\n projection,\n query,\n })\n\n let doc\n if (aggregate) {\n const { docs } = await aggregatePaginate({\n adapter: this,\n joinAggregation: aggregate,\n limit: 1,\n Model,\n pagination: false,\n projection,\n query,\n session,\n })\n doc = docs[0]\n } else {\n ;(options as Record<string, unknown>).projection = projection\n doc = await Model.findOne(query, {}, options)\n }\n\n if (!doc) {\n return null\n }\n\n transform({ adapter: this, data: doc, fields: collectionConfig.fields, operation: 'read' })\n\n return doc\n}\n"],"names":["buildQuery","aggregatePaginate","buildJoinAggregation","buildProjectionFromSelect","getCollection","getSession","transform","findOne","collection","collectionSlug","draftsEnabled","joins","locale","req","select","where","collectionConfig","Model","adapter","session","options","lean","query","fields","flattenedFields","projection","aggregate","doc","docs","joinAggregation","limit","pagination","data","operation"],"mappings":"AAMA,SAASA,UAAU,QAAQ,0BAAyB;AACpD,SAASC,iBAAiB,QAAQ,mCAAkC;AACpE,SAASC,oBAAoB,QAAQ,sCAAqC;AAC1E,SAASC,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,aAAa,QAAQ,2BAA0B;AACxD,SAASC,UAAU,QAAQ,4BAA2B;AACtD,SAASC,SAAS,QAAQ,2BAA0B;AAEpD,OAAO,MAAMC,UAAmB,eAAeA,QAE7C,EAAEC,YAAYC,cAAc,EAAEC,aAAa,EAAEC,KAAK,EAAEC,MAAM,EAAEC,GAAG,EAAEC,MAAM,EAAEC,QAAQ,CAAC,CAAC,EAAE;IAErF,MAAM,EAAEC,gBAAgB,EAAEC,KAAK,EAAE,GAAGb,cAAc;QAAEc,SAAS,IAAI;QAAET;IAAe;IAElF,MAAMU,UAAU,MAAMd,WAAW,IAAI,EAAEQ;IACvC,MAAMO,UAA2C;QAC/CC,MAAM;QACNF;IACF;IAEA,MAAMG,QAAQ,MAAMtB,WAAW;QAC7BkB,SAAS,IAAI;QACbT;QACAc,QAAQP,iBAAiBQ,eAAe;QACxCZ;QACAG;IACF;IAEA,MAAMU,aAAatB,0BAA0B;QAC3Ce,SAAS,IAAI;QACbK,QAAQP,iBAAiBQ,eAAe;QACxCV;IACF;IAEA,MAAMY,YAAY,MAAMxB,qBAAqB;QAC3CgB,SAAS,IAAI;QACbV,YAAYC;QACZO;QACAN;QACAC;QACAC;QACAa;QACAH;IACF;IAEA,IAAIK;IACJ,IAAID,WAAW;QACb,MAAM,EAAEE,IAAI,EAAE,GAAG,MAAM3B,kBAAkB;YACvCiB,SAAS,IAAI;YACbW,iBAAiBH;YACjBI,OAAO;YACPb;YACAc,YAAY;YACZN;YACAH;YACAH;QACF;QACAQ,MAAMC,IAAI,CAAC,EAAE;IACf,OAAO;;QACHR,QAAoCK,UAAU,GAAGA;QACnDE,MAAM,MAAMV,MAAMV,OAAO,CAACe,OAAO,CAAC,GAAGF;IACvC;IAEA,IAAI,CAACO,KAAK;QACR,OAAO;IACT;IAEArB,UAAU;QAAEY,SAAS,IAAI;QAAEc,MAAML;QAAKJ,QAAQP,iBAAiBO,MAAM;QAAEU,WAAW;IAAO;IAEzF,OAAON;AACT,EAAC"}
@@ -5,6 +5,7 @@ type BuildJoinAggregationArgs = {
5
5
  adapter: MongooseAdapter;
6
6
  collection: CollectionSlug;
7
7
  collectionConfig: SanitizedCollectionConfig;
8
+ draftsEnabled?: boolean;
8
9
  joins?: JoinQuery;
9
10
  locale?: string;
10
11
  projection?: Record<string, true>;
@@ -12,6 +13,6 @@ type BuildJoinAggregationArgs = {
12
13
  /** whether the query is from drafts */
13
14
  versions?: boolean;
14
15
  };
15
- export declare const buildJoinAggregation: ({ adapter, collection, collectionConfig, joins, locale, projection, versions, }: BuildJoinAggregationArgs) => Promise<PipelineStage[] | undefined>;
16
+ export declare const buildJoinAggregation: ({ adapter, collection, collectionConfig, draftsEnabled, joins, locale, projection, versions, }: BuildJoinAggregationArgs) => Promise<PipelineStage[] | undefined>;
16
17
  export {};
17
18
  //# sourceMappingURL=buildJoinAggregation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildJoinAggregation.d.ts","sourceRoot":"","sources":["../../src/utilities/buildJoinAggregation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,SAAS,EACd,KAAK,yBAAyB,EAC/B,MAAM,SAAS,CAAA;AAGhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAMlD,KAAK,wBAAwB,GAAG;IAC9B,OAAO,EAAE,eAAe,CAAA;IACxB,UAAU,EAAE,cAAc,CAAA;IAC1B,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAEjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,oBAAoB,oFAQ9B,wBAAwB,KAAG,OAAO,CAAC,aAAa,EAAE,GAAG,SAAS,CAkahE,CAAA"}
1
+ {"version":3,"file":"buildJoinAggregation.d.ts","sourceRoot":"","sources":["../../src/utilities/buildJoinAggregation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,EAIL,KAAK,cAAc,EAInB,KAAK,SAAS,EACd,KAAK,yBAAyB,EAC/B,MAAM,SAAS,CAAA;AAGhB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAOlD,KAAK,wBAAwB,GAAG;IAC9B,OAAO,EAAE,eAAe,CAAA;IACxB,UAAU,EAAE,cAAc,CAAA;IAC1B,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAEjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,oBAAoB,mGAS9B,wBAAwB,KAAG,OAAO,CAAC,aAAa,EAAE,GAAG,SAAS,CAschE,CAAA"}
@@ -1,9 +1,9 @@
1
- import { APIError } from 'payload';
1
+ import { APIError, appendVersionToQueryKey, buildVersionCollectionFields, combineQueries, getQueryDraftsSort } from 'payload';
2
2
  import { fieldShouldBeLocalized } from 'payload/shared';
3
3
  import { buildQuery } from '../queries/buildQuery.js';
4
4
  import { buildSortParam } from '../queries/buildSortParam.js';
5
5
  import { getCollection } from './getEntity.js';
6
- export const buildJoinAggregation = async ({ adapter, collection, collectionConfig, joins, locale, projection, versions })=>{
6
+ export const buildJoinAggregation = async ({ adapter, collection, collectionConfig, draftsEnabled, joins, locale, projection, versions })=>{
7
7
  if (Object.keys(collectionConfig.joins).length === 0 && collectionConfig.polymorphicJoins.length == 0 || joins === false) {
8
8
  return;
9
9
  }
@@ -211,20 +211,34 @@ export const buildJoinAggregation = async ({ adapter, collection, collectionConf
211
211
  if (joins?.[join.joinPath] === false) {
212
212
  continue;
213
213
  }
214
- const { collectionConfig, Model: JoinModel } = getCollection({
215
- adapter,
216
- collectionSlug: join.field.collection
217
- });
214
+ const collectionConfig = adapter.payload.collections[join.field.collection]?.config;
215
+ if (!collectionConfig) {
216
+ throw new APIError(`Collection config for ${join.field.collection.toString()} was not found`);
217
+ }
218
+ let JoinModel;
219
+ const useDrafts = (draftsEnabled || versions) && Boolean(collectionConfig.versions.drafts);
220
+ if (useDrafts) {
221
+ JoinModel = adapter.versions[collectionConfig.slug];
222
+ } else {
223
+ JoinModel = adapter.collections[collectionConfig.slug];
224
+ }
225
+ if (!JoinModel) {
226
+ throw new APIError(`Join Model was not found for ${collectionConfig.slug}`);
227
+ }
218
228
  const { count, limit: limitJoin = join.field.defaultLimit ?? 10, page, sort: sortJoin = join.field.defaultSort || collectionConfig.defaultSort, where: whereJoin = {} } = joins?.[join.joinPath] || {};
219
229
  if (Array.isArray(join.field.collection)) {
220
230
  throw new Error('Unreachable');
221
231
  }
232
+ const fields = useDrafts ? buildVersionCollectionFields(adapter.payload.config, collectionConfig, true) : collectionConfig.flattenedFields;
222
233
  const sort = buildSortParam({
223
234
  adapter,
224
235
  config: adapter.payload.config,
225
- fields: collectionConfig.flattenedFields,
236
+ fields,
226
237
  locale,
227
- sort: sortJoin,
238
+ sort: useDrafts ? getQueryDraftsSort({
239
+ collectionConfig,
240
+ sort: sortJoin
241
+ }) : sortJoin,
228
242
  timestamps: true
229
243
  });
230
244
  const sortProperty = Object.keys(sort)[0];
@@ -232,7 +246,11 @@ export const buildJoinAggregation = async ({ adapter, collection, collectionConf
232
246
  const $match = await JoinModel.buildQuery({
233
247
  locale,
234
248
  payload: adapter.payload,
235
- where: whereJoin
249
+ where: useDrafts ? combineQueries(appendVersionToQueryKey(whereJoin), {
250
+ latest: {
251
+ equals: true
252
+ }
253
+ }) : whereJoin
236
254
  });
237
255
  const pipeline = [
238
256
  {
@@ -285,13 +303,17 @@ export const buildJoinAggregation = async ({ adapter, collection, collectionConf
285
303
  }
286
304
  }
287
305
  });
306
+ let foreignFieldPrefix = '';
307
+ if (useDrafts) {
308
+ foreignFieldPrefix = 'version.';
309
+ }
288
310
  if (adapter.payload.config.localization && locale === 'all') {
289
311
  adapter.payload.config.localization.localeCodes.forEach((code)=>{
290
312
  const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${code}`;
291
313
  aggregate.push({
292
314
  $lookup: {
293
315
  as: `${as}.docs`,
294
- foreignField: `${join.field.on}${code}${polymorphicSuffix}`,
316
+ foreignField: `${foreignFieldPrefix}${join.field.on}${code}${polymorphicSuffix}`,
295
317
  from: JoinModel.collection.name,
296
318
  localField: versions ? 'parent' : '_id',
297
319
  pipeline
@@ -301,7 +323,7 @@ export const buildJoinAggregation = async ({ adapter, collection, collectionConf
301
323
  [`${as}.docs`]: {
302
324
  $map: {
303
325
  as: 'doc',
304
- in: '$$doc._id',
326
+ in: useDrafts ? `$$doc.parent` : '$$doc._id',
305
327
  input: `$${as}.docs`
306
328
  }
307
329
  },
@@ -328,7 +350,7 @@ export const buildJoinAggregation = async ({ adapter, collection, collectionConf
328
350
  });
329
351
  }
330
352
  if (count) {
331
- addTotalDocsAggregation(as, `${join.field.on}${code}${polymorphicSuffix}`);
353
+ addTotalDocsAggregation(as, `${foreignFieldPrefix}${join.field.on}${code}${polymorphicSuffix}`);
332
354
  }
333
355
  });
334
356
  } else {
@@ -348,7 +370,7 @@ export const buildJoinAggregation = async ({ adapter, collection, collectionConf
348
370
  aggregate.push({
349
371
  $lookup: {
350
372
  as: `${as}.docs`,
351
- foreignField,
373
+ foreignField: `${foreignFieldPrefix}${foreignField}`,
352
374
  from: JoinModel.collection.name,
353
375
  localField: versions ? 'parent' : '_id',
354
376
  pipeline
@@ -358,7 +380,7 @@ export const buildJoinAggregation = async ({ adapter, collection, collectionConf
358
380
  [`${as}.docs`]: {
359
381
  $map: {
360
382
  as: 'doc',
361
- in: '$$doc._id',
383
+ in: useDrafts ? `$$doc.parent` : '$$doc._id',
362
384
  input: `$${as}.docs`
363
385
  }
364
386
  },
@@ -373,7 +395,7 @@ export const buildJoinAggregation = async ({ adapter, collection, collectionConf
373
395
  }
374
396
  });
375
397
  if (count) {
376
- addTotalDocsAggregation(as, foreignField);
398
+ addTotalDocsAggregation(as, `${foreignFieldPrefix}${foreignField}`);
377
399
  }
378
400
  if (limitJoin > 0) {
379
401
  aggregate.push({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/buildJoinAggregation.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\n\nimport {\n APIError,\n type CollectionSlug,\n type FlattenedField,\n type JoinQuery,\n type SanitizedCollectionConfig,\n} from 'payload'\nimport { fieldShouldBeLocalized } from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { buildQuery } from '../queries/buildQuery.js'\nimport { buildSortParam } from '../queries/buildSortParam.js'\nimport { getCollection } from './getEntity.js'\n\ntype BuildJoinAggregationArgs = {\n adapter: MongooseAdapter\n collection: CollectionSlug\n collectionConfig: SanitizedCollectionConfig\n joins?: JoinQuery\n locale?: string\n projection?: Record<string, true>\n // the where clause for the top collection\n query?: Record<string, unknown>\n /** whether the query is from drafts */\n versions?: boolean\n}\n\nexport const buildJoinAggregation = async ({\n adapter,\n collection,\n collectionConfig,\n joins,\n locale,\n projection,\n versions,\n}: BuildJoinAggregationArgs): Promise<PipelineStage[] | undefined> => {\n if (\n (Object.keys(collectionConfig.joins).length === 0 &&\n collectionConfig.polymorphicJoins.length == 0) ||\n joins === false\n ) {\n return\n }\n\n const joinConfig = adapter.payload.collections[collection]?.config?.joins\n\n if (!joinConfig) {\n throw new APIError(`Could not retrieve sanitized join config for ${collection}.`)\n }\n\n const aggregate: PipelineStage[] = []\n const polymorphicJoinsConfig = adapter.payload.collections[collection]?.config?.polymorphicJoins\n\n if (!polymorphicJoinsConfig) {\n throw new APIError(`Could not retrieve sanitized polymorphic joins config for ${collection}.`)\n }\n\n for (const join of polymorphicJoinsConfig) {\n if (projection && !projection[join.joinPath]) {\n continue\n }\n\n if (joins?.[join.joinPath] === false) {\n continue\n }\n\n const {\n count = false,\n limit: limitJoin = join.field.defaultLimit ?? 10,\n page,\n sort: sortJoin = join.field.defaultSort || collectionConfig.defaultSort,\n where: whereJoin = {},\n } = joins?.[join.joinPath] || {}\n\n const aggregatedFields: FlattenedField[] = []\n for (const collectionSlug of join.field.collection) {\n const { collectionConfig } = getCollection({ adapter, collectionSlug })\n\n for (const field of collectionConfig.flattenedFields) {\n if (!aggregatedFields.some((eachField) => eachField.name === field.name)) {\n aggregatedFields.push(field)\n }\n }\n }\n\n const sort = buildSortParam({\n adapter,\n config: adapter.payload.config,\n fields: aggregatedFields,\n locale,\n sort: sortJoin,\n timestamps: true,\n })\n\n const $match = await buildQuery({\n adapter,\n fields: aggregatedFields,\n locale,\n where: whereJoin,\n })\n\n const sortProperty = Object.keys(sort)[0]! // assert because buildSortParam always returns at least 1 key.\n const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1\n\n const projectSort = sortProperty !== '_id' && sortProperty !== 'relationTo'\n\n const aliases: string[] = []\n\n const as = join.joinPath\n\n for (const collectionSlug of join.field.collection) {\n const alias = `${as}.docs.${collectionSlug}`\n aliases.push(alias)\n\n const basePipeline = [\n {\n $addFields: {\n relationTo: {\n $literal: collectionSlug,\n },\n },\n },\n {\n $match: {\n $and: [\n {\n $expr: {\n $eq: [`$${join.field.on}`, '$$root_id_'],\n },\n },\n $match,\n ],\n },\n },\n ]\n\n const { Model: JoinModel } = getCollection({ adapter, collectionSlug })\n\n aggregate.push({\n $lookup: {\n as: alias,\n from: JoinModel.collection.name,\n let: {\n root_id_: '$_id',\n },\n pipeline: [\n ...basePipeline,\n {\n $sort: {\n [sortProperty]: sortDirection,\n },\n },\n {\n // Unfortunately, we can't use $skip here because we can lose data, instead we do $slice then\n $limit: page ? page * limitJoin : limitJoin,\n },\n {\n $project: {\n value: '$_id',\n ...(projectSort && {\n [sortProperty]: 1,\n }),\n relationTo: 1,\n },\n },\n ],\n },\n })\n\n if (count) {\n aggregate.push({\n $lookup: {\n as: `${as}.totalDocs.${alias}`,\n from: JoinModel.collection.name,\n let: {\n root_id_: '$_id',\n },\n pipeline: [\n ...basePipeline,\n {\n $count: 'result',\n },\n ],\n },\n })\n }\n }\n\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $concatArrays: aliases.map((alias) => `$${alias}`),\n },\n },\n })\n\n if (count) {\n aggregate.push({\n $addFields: {\n [`${as}.totalDocs`]: {\n $add: aliases.map((alias) => ({\n $ifNull: [\n {\n $first: `$${as}.totalDocs.${alias}.result`,\n },\n 0,\n ],\n })),\n },\n },\n })\n }\n\n aggregate.push({\n $set: {\n [`${as}.docs`]: {\n $sortArray: {\n input: `$${as}.docs`,\n sortBy: {\n [sortProperty]: sortDirection,\n },\n },\n },\n },\n })\n\n const sliceValue = page ? [(page - 1) * limitJoin, limitJoin] : [limitJoin]\n\n aggregate.push({\n $addFields: {\n [`${as}.hasNextPage`]: {\n $gt: [{ $size: `$${as}.docs` }, limitJoin || Number.MAX_VALUE],\n },\n },\n })\n\n aggregate.push({\n $set: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, ...sliceValue],\n },\n },\n })\n }\n\n for (const slug of Object.keys(joinConfig)) {\n const joinsList = joinConfig[slug]\n\n if (!joinsList) {\n throw new APIError(`Failed to retrieve array of joins for ${slug} in collectio ${collection}`)\n }\n\n for (const join of joinsList) {\n if (projection && !projection[join.joinPath]) {\n continue\n }\n\n if (joins?.[join.joinPath] === false) {\n continue\n }\n\n const { collectionConfig, Model: JoinModel } = getCollection({\n adapter,\n collectionSlug: join.field.collection as string,\n })\n\n const {\n count,\n limit: limitJoin = join.field.defaultLimit ?? 10,\n page,\n sort: sortJoin = join.field.defaultSort || collectionConfig.defaultSort,\n where: whereJoin = {},\n } = joins?.[join.joinPath] || {}\n\n if (Array.isArray(join.field.collection)) {\n throw new Error('Unreachable')\n }\n\n const sort = buildSortParam({\n adapter,\n config: adapter.payload.config,\n fields: collectionConfig.flattenedFields,\n locale,\n sort: sortJoin,\n timestamps: true,\n })\n const sortProperty = Object.keys(sort)[0]!\n const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1\n\n const $match = await JoinModel.buildQuery({\n locale,\n payload: adapter.payload,\n where: whereJoin,\n })\n\n const pipeline: Exclude<PipelineStage, PipelineStage.Merge | PipelineStage.Out>[] = [\n { $match },\n {\n $sort: { [sortProperty]: sortDirection },\n },\n ]\n\n if (page) {\n pipeline.push({\n $skip: (page - 1) * limitJoin,\n })\n }\n\n if (limitJoin > 0) {\n pipeline.push({\n $limit: limitJoin + 1,\n })\n }\n\n let polymorphicSuffix = ''\n if (Array.isArray(join.targetField.relationTo)) {\n polymorphicSuffix = '.value'\n }\n\n const addTotalDocsAggregation = (as: string, foreignField: string) =>\n aggregate.push(\n {\n $lookup: {\n as: `${as}.totalDocs`,\n foreignField,\n from: JoinModel.collection.name,\n localField: versions ? 'parent' : '_id',\n pipeline: [\n {\n $match,\n },\n {\n $count: 'result',\n },\n ],\n },\n },\n {\n $addFields: {\n [`${as}.totalDocs`]: { $ifNull: [{ $first: `$${as}.totalDocs.result` }, 0] },\n },\n },\n )\n\n if (adapter.payload.config.localization && locale === 'all') {\n adapter.payload.config.localization.localeCodes.forEach((code) => {\n const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${code}`\n\n aggregate.push(\n {\n $lookup: {\n as: `${as}.docs`,\n foreignField: `${join.field.on}${code}${polymorphicSuffix}`,\n from: JoinModel.collection.name,\n localField: versions ? 'parent' : '_id',\n pipeline,\n },\n },\n {\n $addFields: {\n [`${as}.docs`]: {\n $map: {\n as: 'doc',\n in: '$$doc._id',\n input: `$${as}.docs`,\n },\n }, // Slicing the docs to match the limit\n [`${as}.hasNextPage`]: limitJoin\n ? { $gt: [{ $size: `$${as}.docs` }, limitJoin] }\n : false,\n // Boolean indicating if more docs than limit\n },\n },\n )\n\n if (limitJoin > 0) {\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, limitJoin],\n },\n },\n })\n }\n\n if (count) {\n addTotalDocsAggregation(as, `${join.field.on}${code}${polymorphicSuffix}`)\n }\n })\n } else {\n const localeSuffix =\n fieldShouldBeLocalized({\n field: join.field,\n parentIsLocalized: join.parentIsLocalized,\n }) &&\n adapter.payload.config.localization &&\n locale\n ? `.${locale}`\n : ''\n const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${localeSuffix}`\n\n let foreignField: string\n\n if (join.getForeignPath) {\n foreignField = `${join.getForeignPath({ locale })}${polymorphicSuffix}`\n } else {\n foreignField = `${join.field.on}${polymorphicSuffix}`\n }\n\n aggregate.push(\n {\n $lookup: {\n as: `${as}.docs`,\n foreignField,\n from: JoinModel.collection.name,\n localField: versions ? 'parent' : '_id',\n pipeline,\n },\n },\n {\n $addFields: {\n [`${as}.docs`]: {\n $map: {\n as: 'doc',\n in: '$$doc._id',\n input: `$${as}.docs`,\n },\n }, // Slicing the docs to match the limit\n [`${as}.hasNextPage`]: {\n $gt: [{ $size: `$${as}.docs` }, limitJoin || Number.MAX_VALUE],\n }, // Boolean indicating if more docs than limit\n },\n },\n )\n\n if (count) {\n addTotalDocsAggregation(as, foreignField)\n }\n\n if (limitJoin > 0) {\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, limitJoin],\n },\n },\n })\n }\n }\n }\n }\n\n return aggregate\n}\n"],"names":["APIError","fieldShouldBeLocalized","buildQuery","buildSortParam","getCollection","buildJoinAggregation","adapter","collection","collectionConfig","joins","locale","projection","versions","Object","keys","length","polymorphicJoins","joinConfig","payload","collections","config","aggregate","polymorphicJoinsConfig","join","joinPath","count","limit","limitJoin","field","defaultLimit","page","sort","sortJoin","defaultSort","where","whereJoin","aggregatedFields","collectionSlug","flattenedFields","some","eachField","name","push","fields","timestamps","$match","sortProperty","sortDirection","projectSort","aliases","as","alias","basePipeline","$addFields","relationTo","$literal","$and","$expr","$eq","on","Model","JoinModel","$lookup","from","let","root_id_","pipeline","$sort","$limit","$project","value","$count","$concatArrays","map","$add","$ifNull","$first","$set","$sortArray","input","sortBy","sliceValue","$gt","$size","Number","MAX_VALUE","$slice","slug","joinsList","Array","isArray","Error","$skip","polymorphicSuffix","targetField","addTotalDocsAggregation","foreignField","localField","localization","localeCodes","forEach","code","$map","in","localeSuffix","parentIsLocalized","getForeignPath"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/buildJoinAggregation.ts"],"sourcesContent":["import type { PipelineStage } from 'mongoose'\n\nimport {\n APIError,\n appendVersionToQueryKey,\n buildVersionCollectionFields,\n type CollectionSlug,\n combineQueries,\n type FlattenedField,\n getQueryDraftsSort,\n type JoinQuery,\n type SanitizedCollectionConfig,\n} from 'payload'\nimport { fieldShouldBeLocalized } from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\nimport type { CollectionModel } from '../types.js'\n\nimport { buildQuery } from '../queries/buildQuery.js'\nimport { buildSortParam } from '../queries/buildSortParam.js'\nimport { getCollection } from './getEntity.js'\n\ntype BuildJoinAggregationArgs = {\n adapter: MongooseAdapter\n collection: CollectionSlug\n collectionConfig: SanitizedCollectionConfig\n draftsEnabled?: boolean\n joins?: JoinQuery\n locale?: string\n projection?: Record<string, true>\n // the where clause for the top collection\n query?: Record<string, unknown>\n /** whether the query is from drafts */\n versions?: boolean\n}\n\nexport const buildJoinAggregation = async ({\n adapter,\n collection,\n collectionConfig,\n draftsEnabled,\n joins,\n locale,\n projection,\n versions,\n}: BuildJoinAggregationArgs): Promise<PipelineStage[] | undefined> => {\n if (\n (Object.keys(collectionConfig.joins).length === 0 &&\n collectionConfig.polymorphicJoins.length == 0) ||\n joins === false\n ) {\n return\n }\n\n const joinConfig = adapter.payload.collections[collection]?.config?.joins\n\n if (!joinConfig) {\n throw new APIError(`Could not retrieve sanitized join config for ${collection}.`)\n }\n\n const aggregate: PipelineStage[] = []\n const polymorphicJoinsConfig = adapter.payload.collections[collection]?.config?.polymorphicJoins\n\n if (!polymorphicJoinsConfig) {\n throw new APIError(`Could not retrieve sanitized polymorphic joins config for ${collection}.`)\n }\n\n for (const join of polymorphicJoinsConfig) {\n if (projection && !projection[join.joinPath]) {\n continue\n }\n\n if (joins?.[join.joinPath] === false) {\n continue\n }\n\n const {\n count = false,\n limit: limitJoin = join.field.defaultLimit ?? 10,\n page,\n sort: sortJoin = join.field.defaultSort || collectionConfig.defaultSort,\n where: whereJoin = {},\n } = joins?.[join.joinPath] || {}\n\n const aggregatedFields: FlattenedField[] = []\n for (const collectionSlug of join.field.collection) {\n const { collectionConfig } = getCollection({ adapter, collectionSlug })\n\n for (const field of collectionConfig.flattenedFields) {\n if (!aggregatedFields.some((eachField) => eachField.name === field.name)) {\n aggregatedFields.push(field)\n }\n }\n }\n\n const sort = buildSortParam({\n adapter,\n config: adapter.payload.config,\n fields: aggregatedFields,\n locale,\n sort: sortJoin,\n timestamps: true,\n })\n\n const $match = await buildQuery({\n adapter,\n fields: aggregatedFields,\n locale,\n where: whereJoin,\n })\n\n const sortProperty = Object.keys(sort)[0]! // assert because buildSortParam always returns at least 1 key.\n const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1\n\n const projectSort = sortProperty !== '_id' && sortProperty !== 'relationTo'\n\n const aliases: string[] = []\n\n const as = join.joinPath\n\n for (const collectionSlug of join.field.collection) {\n const alias = `${as}.docs.${collectionSlug}`\n aliases.push(alias)\n\n const basePipeline = [\n {\n $addFields: {\n relationTo: {\n $literal: collectionSlug,\n },\n },\n },\n {\n $match: {\n $and: [\n {\n $expr: {\n $eq: [`$${join.field.on}`, '$$root_id_'],\n },\n },\n $match,\n ],\n },\n },\n ]\n\n const { Model: JoinModel } = getCollection({ adapter, collectionSlug })\n\n aggregate.push({\n $lookup: {\n as: alias,\n from: JoinModel.collection.name,\n let: {\n root_id_: '$_id',\n },\n pipeline: [\n ...basePipeline,\n {\n $sort: {\n [sortProperty]: sortDirection,\n },\n },\n {\n // Unfortunately, we can't use $skip here because we can lose data, instead we do $slice then\n $limit: page ? page * limitJoin : limitJoin,\n },\n {\n $project: {\n value: '$_id',\n ...(projectSort && {\n [sortProperty]: 1,\n }),\n relationTo: 1,\n },\n },\n ],\n },\n })\n\n if (count) {\n aggregate.push({\n $lookup: {\n as: `${as}.totalDocs.${alias}`,\n from: JoinModel.collection.name,\n let: {\n root_id_: '$_id',\n },\n pipeline: [\n ...basePipeline,\n {\n $count: 'result',\n },\n ],\n },\n })\n }\n }\n\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $concatArrays: aliases.map((alias) => `$${alias}`),\n },\n },\n })\n\n if (count) {\n aggregate.push({\n $addFields: {\n [`${as}.totalDocs`]: {\n $add: aliases.map((alias) => ({\n $ifNull: [\n {\n $first: `$${as}.totalDocs.${alias}.result`,\n },\n 0,\n ],\n })),\n },\n },\n })\n }\n\n aggregate.push({\n $set: {\n [`${as}.docs`]: {\n $sortArray: {\n input: `$${as}.docs`,\n sortBy: {\n [sortProperty]: sortDirection,\n },\n },\n },\n },\n })\n\n const sliceValue = page ? [(page - 1) * limitJoin, limitJoin] : [limitJoin]\n\n aggregate.push({\n $addFields: {\n [`${as}.hasNextPage`]: {\n $gt: [{ $size: `$${as}.docs` }, limitJoin || Number.MAX_VALUE],\n },\n },\n })\n\n aggregate.push({\n $set: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, ...sliceValue],\n },\n },\n })\n }\n\n for (const slug of Object.keys(joinConfig)) {\n const joinsList = joinConfig[slug]\n\n if (!joinsList) {\n throw new APIError(`Failed to retrieve array of joins for ${slug} in collectio ${collection}`)\n }\n\n for (const join of joinsList) {\n if (projection && !projection[join.joinPath]) {\n continue\n }\n\n if (joins?.[join.joinPath] === false) {\n continue\n }\n\n const collectionConfig = adapter.payload.collections[join.field.collection as string]?.config\n\n if (!collectionConfig) {\n throw new APIError(\n `Collection config for ${join.field.collection.toString()} was not found`,\n )\n }\n\n let JoinModel: CollectionModel | undefined\n\n const useDrafts = (draftsEnabled || versions) && Boolean(collectionConfig.versions.drafts)\n\n if (useDrafts) {\n JoinModel = adapter.versions[collectionConfig.slug]\n } else {\n JoinModel = adapter.collections[collectionConfig.slug]\n }\n\n if (!JoinModel) {\n throw new APIError(`Join Model was not found for ${collectionConfig.slug}`)\n }\n\n const {\n count,\n limit: limitJoin = join.field.defaultLimit ?? 10,\n page,\n sort: sortJoin = join.field.defaultSort || collectionConfig.defaultSort,\n where: whereJoin = {},\n } = joins?.[join.joinPath] || {}\n\n if (Array.isArray(join.field.collection)) {\n throw new Error('Unreachable')\n }\n\n const fields = useDrafts\n ? buildVersionCollectionFields(adapter.payload.config, collectionConfig, true)\n : collectionConfig.flattenedFields\n\n const sort = buildSortParam({\n adapter,\n config: adapter.payload.config,\n fields,\n locale,\n sort: useDrafts ? getQueryDraftsSort({ collectionConfig, sort: sortJoin }) : sortJoin,\n timestamps: true,\n })\n const sortProperty = Object.keys(sort)[0]!\n const sortDirection = sort[sortProperty] === 'asc' ? 1 : -1\n\n const $match = await JoinModel.buildQuery({\n locale,\n payload: adapter.payload,\n where: useDrafts\n ? combineQueries(appendVersionToQueryKey(whereJoin), {\n latest: {\n equals: true,\n },\n })\n : whereJoin,\n })\n\n const pipeline: Exclude<PipelineStage, PipelineStage.Merge | PipelineStage.Out>[] = [\n { $match },\n {\n $sort: { [sortProperty]: sortDirection },\n },\n ]\n\n if (page) {\n pipeline.push({\n $skip: (page - 1) * limitJoin,\n })\n }\n\n if (limitJoin > 0) {\n pipeline.push({\n $limit: limitJoin + 1,\n })\n }\n\n let polymorphicSuffix = ''\n if (Array.isArray(join.targetField.relationTo)) {\n polymorphicSuffix = '.value'\n }\n\n const addTotalDocsAggregation = (as: string, foreignField: string) =>\n aggregate.push(\n {\n $lookup: {\n as: `${as}.totalDocs`,\n foreignField,\n from: JoinModel.collection.name,\n localField: versions ? 'parent' : '_id',\n pipeline: [\n {\n $match,\n },\n {\n $count: 'result',\n },\n ],\n },\n },\n {\n $addFields: {\n [`${as}.totalDocs`]: { $ifNull: [{ $first: `$${as}.totalDocs.result` }, 0] },\n },\n },\n )\n\n let foreignFieldPrefix = ''\n\n if (useDrafts) {\n foreignFieldPrefix = 'version.'\n }\n\n if (adapter.payload.config.localization && locale === 'all') {\n adapter.payload.config.localization.localeCodes.forEach((code) => {\n const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${code}`\n\n aggregate.push(\n {\n $lookup: {\n as: `${as}.docs`,\n foreignField: `${foreignFieldPrefix}${join.field.on}${code}${polymorphicSuffix}`,\n from: JoinModel.collection.name,\n localField: versions ? 'parent' : '_id',\n pipeline,\n },\n },\n {\n $addFields: {\n [`${as}.docs`]: {\n $map: {\n as: 'doc',\n in: useDrafts ? `$$doc.parent` : '$$doc._id',\n input: `$${as}.docs`,\n },\n }, // Slicing the docs to match the limit\n [`${as}.hasNextPage`]: limitJoin\n ? { $gt: [{ $size: `$${as}.docs` }, limitJoin] }\n : false,\n // Boolean indicating if more docs than limit\n },\n },\n )\n\n if (limitJoin > 0) {\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, limitJoin],\n },\n },\n })\n }\n\n if (count) {\n addTotalDocsAggregation(\n as,\n `${foreignFieldPrefix}${join.field.on}${code}${polymorphicSuffix}`,\n )\n }\n })\n } else {\n const localeSuffix =\n fieldShouldBeLocalized({\n field: join.field,\n parentIsLocalized: join.parentIsLocalized,\n }) &&\n adapter.payload.config.localization &&\n locale\n ? `.${locale}`\n : ''\n const as = `${versions ? `version.${join.joinPath}` : join.joinPath}${localeSuffix}`\n\n let foreignField: string\n\n if (join.getForeignPath) {\n foreignField = `${join.getForeignPath({ locale })}${polymorphicSuffix}`\n } else {\n foreignField = `${join.field.on}${polymorphicSuffix}`\n }\n\n aggregate.push(\n {\n $lookup: {\n as: `${as}.docs`,\n foreignField: `${foreignFieldPrefix}${foreignField}`,\n from: JoinModel.collection.name,\n localField: versions ? 'parent' : '_id',\n pipeline,\n },\n },\n {\n $addFields: {\n [`${as}.docs`]: {\n $map: {\n as: 'doc',\n in: useDrafts ? `$$doc.parent` : '$$doc._id',\n input: `$${as}.docs`,\n },\n }, // Slicing the docs to match the limit\n [`${as}.hasNextPage`]: {\n $gt: [{ $size: `$${as}.docs` }, limitJoin || Number.MAX_VALUE],\n }, // Boolean indicating if more docs than limit\n },\n },\n )\n\n if (count) {\n addTotalDocsAggregation(as, `${foreignFieldPrefix}${foreignField}`)\n }\n\n if (limitJoin > 0) {\n aggregate.push({\n $addFields: {\n [`${as}.docs`]: {\n $slice: [`$${as}.docs`, limitJoin],\n },\n },\n })\n }\n }\n }\n }\n\n return aggregate\n}\n"],"names":["APIError","appendVersionToQueryKey","buildVersionCollectionFields","combineQueries","getQueryDraftsSort","fieldShouldBeLocalized","buildQuery","buildSortParam","getCollection","buildJoinAggregation","adapter","collection","collectionConfig","draftsEnabled","joins","locale","projection","versions","Object","keys","length","polymorphicJoins","joinConfig","payload","collections","config","aggregate","polymorphicJoinsConfig","join","joinPath","count","limit","limitJoin","field","defaultLimit","page","sort","sortJoin","defaultSort","where","whereJoin","aggregatedFields","collectionSlug","flattenedFields","some","eachField","name","push","fields","timestamps","$match","sortProperty","sortDirection","projectSort","aliases","as","alias","basePipeline","$addFields","relationTo","$literal","$and","$expr","$eq","on","Model","JoinModel","$lookup","from","let","root_id_","pipeline","$sort","$limit","$project","value","$count","$concatArrays","map","$add","$ifNull","$first","$set","$sortArray","input","sortBy","sliceValue","$gt","$size","Number","MAX_VALUE","$slice","slug","joinsList","toString","useDrafts","Boolean","drafts","Array","isArray","Error","latest","equals","$skip","polymorphicSuffix","targetField","addTotalDocsAggregation","foreignField","localField","foreignFieldPrefix","localization","localeCodes","forEach","code","$map","in","localeSuffix","parentIsLocalized","getForeignPath"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/db-mongodb",
3
- "version": "3.30.0-internal.ef2a0e5",
3
+ "version": "3.31.0-canary.0",
4
4
  "description": "The officially supported MongoDB database adapter for Payload",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -49,10 +49,10 @@
49
49
  "mongodb": "6.12.0",
50
50
  "mongodb-memory-server": "^10",
51
51
  "@payloadcms/eslint-config": "3.28.0",
52
- "payload": "3.30.0-internal.ef2a0e5"
52
+ "payload": "3.31.0-canary.0"
53
53
  },
54
54
  "peerDependencies": {
55
- "payload": "3.30.0-internal.ef2a0e5"
55
+ "payload": "3.31.0-canary.0"
56
56
  },
57
57
  "scripts": {
58
58
  "build": "pnpm build:types && pnpm build:swc",