> Portal Navigation: > > - Append `.md` to any URL under `https://dev.wix.com/docs/` to get its markdown version. > - Pages are either content pages (article or reference text) or menu pages (a list of links to child pages). > - To get a menu page, truncate any URL to a parent path and append `.md` (e.g. `https://dev.wix.com/docs/sdk.md`, `https://dev.wix.com/docs/sdk/core-modules.md`). > - Top-level index of all portals: https://dev.wix.com/docs/llms.txt > - Full concatenated docs: https://dev.wix.com/docs/llms-full.txt # Method name: updateDataCollection(collection: DataCollection) # Method package: wixDataV2 # Method menu location: wixDataV2 --> collections --> updateDataCollection # Method Link: https://dev.wix.com/docs/velo/apis/wix-data-v2/collections/update-data-collection.md # Method Description: Updates a data collection. A collection ID, revision number, permissions, and at least 1 field must be provided within the `collection` body parameter. If a collection with that ID exists, and if its current `revision` number matches the one provided, it is updated. Otherwise, the request fails. When a collection is updated, its `updatedDate` property is changed to the current date and its `revision` property is incremented. > **Note:** > After a collection is updated, it only contains the properties included in the Update Data Collection request. If the existing collection has properties with values and those properties > aren't included in the updated collection details, their values are lost. # Method Code Examples: *** Note: do not assume any prop names or enum values other than the ones in the example. ## Updates an existing collection (dashboard page code) ```javascript import { collections } from "wix-data.v2"; /* Example collection parameter: * Elevate read permissions to SITE_MEMBER, and add a field * * const updatedDataCollection = { * _id: "myMusicCollection", * fields: * [ * { * key: "artist", * displayName: "Artist Name", * description: "The artist's name", * }, * { * key: "song", * displayName: "Song Title", * description: "The song's title", * "required": true * }, * ] * revision: "1", * permissions: { * read: "SITE_MEMBER", * insert: "SITE_MEMBER_AUTHOR", * update: "SITE_MEMBER_AUTHOR", * remove: "SITE_MEMBER_AUTHOR" * }, * }; */ export async function myUpdateDataCollectionFunction(updatedDataCollection) { try { const updateDataCollectionResponse = await collections.updateDataCollection(updatedDataCollection); return updateDataCollectionResponse; } catch (error) { console.error(error); // Handle the error } } /* Returns a promise that resolves to the updated collection: * { * "_id": "myMusicCollection", * "collectionType": "NATIVE", * "displayName": "My Music Collection", * "displayField": "myMusicCollection", * "capabilities": { * "dataOperations": [ * "IS_REFERENCED", * "INSERT", * "SAVE", * "BULK_INSERT", * "BULK_UPDATE", * "UPDATE", * "TRUNCATE", * "REMOVE", * "REMOVE_REFERENCE", * "COUNT", * "FIND", * "REPLACE_REFERENCES", * "BULK_REMOVE", * "INSERT_REFERENCE", * "GET", * "BULK_SAVE", * "QUERY_REFERENCED", * "DISTINCT", * "AGGREGATE" * ], * "collectionOperations": [ * "UPDATE", * "REMOVE" * ], * "indexLimits": { * "regular": 3, * "unique": 1, * "total": 4 * } * }, * "fields": [ * { * "key": "artist", * "displayName": "Artist Name", * "type": "TEXT", * "systemField": false, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false, * "description": "The artist's name", * "required": true * }, * { * "key": "song", * "displayName": "Song Title", * "type": "TEXT", * "systemField": false, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false, * "description": "The song's title", * "required": true * }, * { * "key": "_id", * "displayName": "ID", * "type": "TEXT", * "systemField": true, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false * }, * { * "key": "_createdDate", * "displayName": "Created Date", * "type": "DATETIME", * "systemField": true, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false * }, * { * "key": "_updatedDate", * "displayName": "Updated Date", * "type": "DATETIME", * "systemField": true, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false * }, * { * "key": "_owner", * "displayName": "Owner", * "type": "TEXT", * "systemField": true, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false * } * ], * "permissions": { * "insert": "SITE_MEMBER", * "update": "SITE_MEMBER_AUTHOR", * "remove": "SITE_MEMBER_AUTHOR", * "read": "SITE_MEMBER_AUTHOR" * }, * "revision": "2", * "plugins": [], * "pagingModes": [ * "OFFSET" * ], * "_createdDate": "2023-07-19T12:40:02.372Z", * "_updatedDate": "2023-07-19T14:00:28.836Z" * } */ ``` ## Updates an existing collection (export from backend code) ```javascript import { Permissions, webMethod } from 'wix-web-module'; import { collections } from 'wix-data.v2'; /* Example collection parameter: * Elevate read permissions to SITE_MEMBER, and add a field * * const updatedDataCollection = { * _id: "myMusicCollection", * fields: * [ * { * key: "artist", * displayName: "Artist Name", * description: "The artist's name", * }, * { * key: "song", * displayName: "Song Title", * description: "The song's title", * "required": true * }, * ] * revision: "1", * permissions: { * read: "SITE_MEMBER", * insert: "SITE_MEMBER_AUTHOR", * update: "SITE_MEMBER_AUTHOR", * remove: "SITE_MEMBER_AUTHOR" * }, * }; */ export const myUpdateDataCollectionFunction = webMethod(Permissions.Anyone, async (updatedDataCollection) => { try { const updateDataCollectionResponse = await collections.updateDataCollection(updatedDataCollection); return updateDataCollectionResponse; } catch (error) { console.error(error); // Handle the error } }); /* Returns a promise that resolves to the updated collection: * { * "_id": "myMusicCollection", * "collectionType": "NATIVE", * "displayName": "My Music Collection", * "displayField": "myMusicCollection", * "capabilities": { * "dataOperations": [ * "IS_REFERENCED", * "INSERT", * "SAVE", * "BULK_INSERT", * "BULK_UPDATE", * "UPDATE", * "TRUNCATE", * "REMOVE", * "REMOVE_REFERENCE", * "COUNT", * "FIND", * "REPLACE_REFERENCES", * "BULK_REMOVE", * "INSERT_REFERENCE", * "GET", * "BULK_SAVE", * "QUERY_REFERENCED", * "DISTINCT", * "AGGREGATE" * ], * "collectionOperations": [ * "UPDATE", * "REMOVE" * ], * "indexLimits": { * "regular": 3, * "unique": 1, * "total": 4 * } * }, * "fields": [ * { * "key": "artist", * "displayName": "Artist Name", * "type": "TEXT", * "systemField": false, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false, * "description": "The artist's name", * "required": true * }, * { * "key": "song", * "displayName": "Song Title", * "type": "TEXT", * "systemField": false, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false, * "description": "The song's title", * "required": true * }, * { * "key": "_id", * "displayName": "ID", * "type": "TEXT", * "systemField": true, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false * }, * { * "key": "_createdDate", * "displayName": "Created Date", * "type": "DATETIME", * "systemField": true, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false * }, * { * "key": "_updatedDate", * "displayName": "Updated Date", * "type": "DATETIME", * "systemField": true, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false * }, * { * "key": "_owner", * "displayName": "Owner", * "type": "TEXT", * "systemField": true, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false * } * ], * "permissions": { * "insert": "SITE_MEMBER", * "update": "SITE_MEMBER_AUTHOR", * "remove": "SITE_MEMBER_AUTHOR", * "read": "SITE_MEMBER_AUTHOR" * }, * "revision": "2", * "plugins": [], * "pagingModes": [ * "OFFSET" * ], * "_createdDate": "2023-07-19T12:40:02.372Z", * "_updatedDate": "2023-07-19T14:00:28.836Z" * } */ ``` ## Updates an existing collection ```javascript import { Permissions, webMethod } from 'wix-web-module'; import { collections } from 'wix-data.v2'; /* Example collection object: * * Existing fields are added a "type" property. In addition, a plugin has been added that defines each new * item in the collection draft by default. You can publish them at a later date. * * const updatedCollection = { * _id: "shirts", * revision: "1", * displayName: "Shirts", * displayField: "shirts", * permissions: { * read: "ANYONE", * insert: "SITE_MEMBER_AUTHOR", * update: "SITE_MEMBER_AUTHOR", * remove: "SITE_MEMBER_AUTHOR" * }, * fields: * [ * { * key: "name", * displayName: "Item Name", * description: "Name of item, required", * required: true, * type: "TEXT" * }, * { * key: "price", * displayName: "Price of Item", * description: "Price of item, required", * required: true, * type: "NUMBER" * }, * { * key: "desc", * displayName: "Item Description", * description: "Item description, not required", * type: "TEXT" * }, * ], * plugins: * [ * { * type: "URLIZED", * urlizedOptions: { * format: "ORIGINAL" * } * }, * { * type: "PUBLISH", * publishOptions: { * defaultStatus: "DRAFT" * } * } * ] * }; */ export const myUpdateDataCollectionFunction = webMethod(Permissions.Anyone, async (updatedCollection) => { try { const updateDataCollectionResponse = await collections.updateDataCollection(updatedCollection); return updateDataCollectionResponse; } catch (error) { console.error(error); // Handle the error } }); /* Returns a promise that resolves to the updated collection: * { * "_id": "shirts", * "collectionType": "NATIVE", * "displayName": "Shirts", * "displayField": "shirts", * "capabilities": { * "dataOperations": [ * "IS_REFERENCED", * "INSERT", * "SAVE", * "BULK_INSERT", * "BULK_UPDATE", * "UPDATE", * "TRUNCATE", * "REMOVE", * "REMOVE_REFERENCE", * "COUNT", * "FIND", * "REPLACE_REFERENCES", * "BULK_REMOVE", * "INSERT_REFERENCE", * "GET", * "BULK_SAVE", * "QUERY_REFERENCED", * "DISTINCT", * "AGGREGATE" * ], * "collectionOperations": [ * "UPDATE", * "REMOVE" * ], * "indexLimits": { * "regular": 3, * "unique": 1, * "total": 4 * } * }, * "fields": [ * { * "key": "name", * "displayName": "Item Name", * "type": "TEXT", * "systemField": false, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false, * "description": "Name of item, required", * "required": true * }, * { * "key": "price", * "displayName": "Price of Item", * "type": "NUMBER", * "systemField": false, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false, * "description": "Price of item, required", * "required": true * }, * { * "key": "desc", * "displayName": "Item Description", * "type": "TEXT", * "systemField": false, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false, * "description": "Item description, not required" * }, * { * "key": "_id", * "displayName": "ID", * "type": "TEXT", * "systemField": true, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false * }, * { * "key": "_createdDate", * "displayName": "Created Date", * "type": "DATETIME", * "systemField": true, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false * }, * { * "key": "_updatedDate", * "displayName": "Updated Date", * "type": "DATETIME", * "systemField": true, * "capabilities": { * "sortable": true, * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false * }, * { * "key": "_draftDate", * "displayName": "Unpublish Date", * "type": "DATETIME", * "systemField": true, * "capabilities": { * "sortable": true, * "queryOperators": [ * "EQ", * "LT", * "GT", * "NE", * "LTE", * "GTE", * "STARTS_WITH", * "ENDS_WITH", * "CONTAINS", * "HAS_SOME", * "HAS_ALL", * "EXISTS", * "URLIZED" * ] * }, * "encrypted": false * } * ], * "permissions": { * "insert": "SITE_MEMBER_AUTHOR", * "update": "SITE_MEMBER_AUTHOR", * "remove": "SITE_MEMBER_AUTHOR", * "read": "ANYONE" * }, * "revision": "2", * "plugins": [ * { * "type": "URLIZED", * "urlizedOptions": { * "format": "ORIGINAL" * } * }, * { * "type": "PUBLISH", * "publishOptions": { * "defaultStatus": "DRAFT" * } * } * ], * "pagingModes": [ * "OFFSET" * ], * "_createdDate": "2023-07-23T11:38:41.518Z", * "_updatedDate": "2023-07-23T13:13:49.154Z" * }; */ ``` ---