### What? This PR removes a pair unnecessary calls to `schema.index` against the timestamp fields. The issue is when a user sets `indexSortableFields` as this is what will ultimately pass the predicate which then creates duplicate indexes. ### Why? These calls are redundant as `index` is [already passed](https://github.com/payloadcms/payload/blob/main/packages/db-mongodb/src/models/buildSchema.ts#L69) to the underlying fields base schema options in the process of formatting and will already be indexed. These warnings were surfaced after the bump to mongoose to version 8.9.5 as [in 8.9.3 mongoose began throwing these warnings to indicate duplicative indexes](https://github.com/Automattic/mongoose/releases/tag/8.9.3). ### How? By removing these calls and, as a result, silencing the warnings thrown by mongoose.
47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import type { PaginateOptions, Schema } from 'mongoose'
|
|
import type { Payload, SanitizedCollectionConfig } from 'payload'
|
|
|
|
import mongooseAggregatePaginate from 'mongoose-aggregate-paginate-v2'
|
|
import paginate from 'mongoose-paginate-v2'
|
|
|
|
import { getBuildQueryPlugin } from '../queries/buildQuery.js'
|
|
import { buildSchema } from './buildSchema.js'
|
|
|
|
export const buildCollectionSchema = (
|
|
collection: SanitizedCollectionConfig,
|
|
payload: Payload,
|
|
schemaOptions = {},
|
|
): Schema => {
|
|
const schema = buildSchema(payload, collection.fields, {
|
|
draftsEnabled: Boolean(typeof collection?.versions === 'object' && collection.versions.drafts),
|
|
indexSortableFields: payload.config.indexSortableFields,
|
|
options: {
|
|
minimize: false,
|
|
timestamps: collection.timestamps !== false,
|
|
...schemaOptions,
|
|
},
|
|
})
|
|
|
|
if (Array.isArray(collection.upload.filenameCompoundIndex)) {
|
|
const indexDefinition: Record<string, 1> = collection.upload.filenameCompoundIndex.reduce(
|
|
(acc, index) => {
|
|
acc[index] = 1
|
|
return acc
|
|
},
|
|
{},
|
|
)
|
|
|
|
schema.index(indexDefinition, { unique: true })
|
|
}
|
|
|
|
schema
|
|
.plugin<any, PaginateOptions>(paginate, { useEstimatedCount: true })
|
|
.plugin(getBuildQueryPlugin({ collectionSlug: collection.slug }))
|
|
|
|
if (Object.keys(collection.joins).length > 0) {
|
|
schema.plugin(mongooseAggregatePaginate)
|
|
}
|
|
|
|
return schema
|
|
}
|