> 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: bulkUpdate(collectionId: string, items: Array, options: WixDataOptions) # Method package: wixData # Method menu location: wixData --> bulkUpdate # Method Link: https://dev.wix.com/docs/velo/apis/wix-data/bulk-update.md # Method Description: Updates a number of items in a collection. The `bulkUpdate()` function returns a Promise that resolves after the items have been updated in the specified collection. The Promise is rejected if the current user does not have update permissions for the collection. Items are skipped if they include an `_id` property whose value does not match an existing ID in the collection. Meaning, `bulkUpdate()` cannot add new items into the collection. Calling the `bulkUpdate()` function triggers the [`beforeUpdate()`](wix-data.Hooks.html#beforeUpdate) and [`afterUpdate()`](wix-data.Hooks.html#afterUpdate) hooks for each item that is updated if the hooks have been defined. The `bulkUpdate()` function compares the `_id` property of the specified items with the `_id` property values of the items in the specified collection. > **Warning:** If an existing item in the specified collection matches the `_id` of the specified item, `bulkUpdate` replaces the existing item's property values with the ones in the specified item. **If the existing item had properties with values and those properties were not included in the specified item, the values in those properties are lost.** The item's `_updatedDate` property is also updated to the current date. Any valid JavaScript object can be used as a property value. The `bulkUpdate()` function maintains the structure of the specified object. For example, objects that contain nested objects, Arrays, or Arrays with nested objects are all added to the collection as defined. Use the `options` parameter to run `bulkUpdate()` from backend code without checking for permissions or without its registered hooks. When updating items in a collection that has a reference field, set the values of the reference field to the referenced item's `_id` value or the entire referenced item object. The maximum size of an item that you can update in a collection is 500kb. > **Notes:** > - Bulk operations are limited to 1000 items per function call. > - The `bulkUpdate()` function is not supported for Single Item Collections. > - The `bulkUpdate()` function does not support multi-reference fields. For multi-reference fields, use [`replaceReferences()`](https://www.wix.com/velo/reference/wix-data/replacereferences) or [`insertReference()`](https://www.wix.com/velo/reference/wix-data/insertreference). > - [Translatable collections](https://support.wix.com/en/article/wix-multilingual-translating-cms-collection-content) do not allow insertion and modification of items when working in a non-primary language. For example, if a collection's primary language is English, and the site visitor is viewing the site in French, calling `bulkUpdate()` will fail and issue an error. # Method Code Examples: *** Note: do not assume any prop names or enum values other than the ones in the example. ## Update multiple items with specified IDs in a collection ```javascript import wixData from 'wix-data'; // ... let toUpdate1 = { "_id": "00001", "title": "Mr.", "first_name": "John", "last_name": "Doe" }; let toUpdate2 = { "_id": "00002", "title": "Ms.", "first_name": "Jane", "last_name": "Doe" }; wixData.bulkUpdate("myCollection", [toUpdate1, toUpdate2]) .then((results) => { let inserted = results.inserted; // 0 let insertedIds = results.insertedItemIds; // [] let updated = results.updated; // 2 let skipped = results.skipped; // 0 let errors = results.errors; // [] }) .catch((err) => { let errorMsg = err; }); ``` ## Update multiple items in a collection using data options ```javascript import wixData from 'wix-data'; // ... let toUpdate1 = { "_id": "00001", "title": "Mr.", "first_name": "John", "last_name": "Doe" }; let toUpdate2 = { "_id": "00002", "title": "Ms.", "first_name": "Jane", "last_name": "Doe" }; let options = { "suppressAuth": true, "suppressHooks": true }; wixData.bulkUpdate("myCollection", [toUpdate1, toUpdate2], options) .then((results) => { let inserted = results.inserted; // 0 let insertedIds = results.insertedItemIds; // [] let updated = results.updated; // 2 let skipped = results.skipped; // 0 let errors = results.errors; // [] }) .catch((err) => { let errorMsg = err; }); ``` ## Update multiple items including a reference to another item using the referenced item's ID ```javascript import wixData from 'wix-data'; // ... let countryId = "id-of-usa-item"; let toUpdate1 = { "_id": "00001", "title": "Mr.", "first_name": "John", "last_name": "Doe", "country": countryId }; let toUpdate2 = { "_id": "00002", "title": "Ms.", "first_name": "Jane", "last_name": "Doe", "country": countryId }; wixData.bulkUpdate("myCollection", [toUpdate1, toUpdate2]) .then((results) => { let inserted = results.inserted; // 0 let insertedIds = results.insertedItemIds; // [] let updated = results.updated; // 2 let skipped = results.skipped; // 0 let errors = results.errors; // [] }) .catch((err) => { let errorMsg = err; }); ``` ## Update multiple items including a reference to another item using the referenced item ```javascript import wixData from 'wix-data'; // ... let countryItem = // get country item from somewhere let toUpdate1 = { "_id": "00001", "title": "Mr.", "first_name": "John", "last_name": "Doe", "country": countryItem }; let toUpdate2 = { "_id": "00002", "title": "Ms.", "first_name": "Jane", "last_name": "Doe", "country": countryItem }; wixData.bulkUpdate("myCollection", [toUpdate1, toUpdate2]) .then((results) => { let inserted = results.inserted; // 0 let insertedIds = results.insertedItemIds; // [] let updated = results.updated; // 2 let skipped = results.skipped; // 0 let errors = results.errors; // [] }) .catch((err) => { let errorMsg = err; }); ``` ---