diff --git a/src/mongoose/buildSchema.ts b/src/mongoose/buildSchema.ts index aad35351a..c5eed1f4f 100644 --- a/src/mongoose/buildSchema.ts +++ b/src/mongoose/buildSchema.ts @@ -80,7 +80,7 @@ const buildSchema = (config: SanitizedConfig, configFields: Field[], buildSchema if (config.indexSortableFields && !buildSchemaOptions.global && !field.index && !field.hidden && sortableFieldTypes.indexOf(field.type) > -1 && fieldAffectsData(field)) { indexFields.push({ index: { [field.name]: 1 } }); } else if (field.unique && fieldAffectsData(field)) { - indexFields.push({ index: { [field.name]: 1 }, options: { unique: true, sparse: field.localized || false } }); + indexFields.push({ index: { [field.name]: 1 }, options: { unique: !buildSchemaOptions.disableUnique, sparse: field.localized || false } }); } else if (field.index && fieldAffectsData(field)) { indexFields.push({ index: { [field.name]: 1 } }); } diff --git a/test/versions/int.spec.ts b/test/versions/int.spec.ts index 6d6dca189..7bca5a3e9 100644 --- a/test/versions/int.spec.ts +++ b/test/versions/int.spec.ts @@ -62,7 +62,7 @@ describe('Versions', () => { collectionLocalPostID = autosavePost.id; - const updatedPost = await payload.update({ + const updatedPost = await payload.update({ id: collectionLocalPostID, collection, data: { @@ -82,6 +82,35 @@ describe('Versions', () => { expect(collectionLocalVersionID).toBeDefined(); }); + it('should allow saving multiple versions of models with unique fields', async () => { + const autosavePost = await payload.create({ + collection, + data: { + title: 'unique unchanging title', + description: 'description 1', + }, + }); + + await payload.update({ + id: autosavePost.id, + collection, + data: { + description: 'description 2', + }, + }); + const finalDescription = 'final description'; + + const secondUpdate = await payload.update({ + id: autosavePost.id, + collection, + data: { + description: finalDescription, + }, + }); + + expect(secondUpdate.description).toBe(finalDescription); + }); + it('should allow a version to be retrieved by ID', async () => { const version = await payload.findVersionByID({ collection,