index.partialUpdateObjects(arrayobjects)
index.partialUpdateObjects(arrayobjects, {
// All the following parameters are optionalcreateIfNotExists: bool,
// + any requestOptions
})
index.partialUpdateObject(objectobject)
index.partialUpdateObject(objectobject, {
// All the following parameters are optionalcreateIfNotExists: bool,
// + any requestOptions
})
index.PartialUpdateObjects(
IEnumerable<T>objects,
// All the following parameters are optional,createIfNotExists: bool,
requestOptions: RequestOptions
)
// update a single object
index.PartialUpdateObject(
Tobject,
// All the following parameters are optional,createIfNotExists: bool,
requestOptions: RequestOptions
)
index.PartialUpdateObjects(objects)
// will set createIfNotExists to false
index.PartialUpdateObjectsNoCreate([]Objectobjects)
index.PartialUpdateObjects([]Objectobjects, RequestOptionsrequestOptions)
index.PartialUpdateObjectsNoCreate([]Objectobjects, RequestOptionsrequestOptions)
// update a single object
index.PartialUpdateObject(object)
// will set createIfNotExists to false
index.PartialUpdateObjectNoCreate(Objectobject)
index.PartialUpdateObject(Objectobject, RequestOptionsrequestOptions)
index.PartialUpdateObjectNoCreate(Objectobject, RequestOptionsrequestOptions)
partialUpdate from "index_name" objects objects
partialUpdate from "index_name" objects objects options requestOptions// update a single object
partialUpdate from "index_name" `object` object
partialUpdate from "index_name" `object` object options requestOptions
We released a new version of the PHP API client in public beta.
Read the beta documentation for more information.
We released a new version of the JavaScript API client in public beta.
Read the beta documentation for more information.
We released a new version of the Java API client in public beta.
Read the beta documentation for more information.
You’re currently reading the JavaScript API client v4 documentation. Check the migration guide to learn how to upgrade from v3 to v4. You can still access the v3 documentation.
Update one or more attributes of an existing object.
This method lets you update only a part of an existing object by adding new attributes or updating existing ones. It requires an objectID:
If the objectID exists, Algolia replaces the attributes
If the objectID is specified but doesn’t exist, Algolia creates a new record
If the objectIDisn’t specified, the method returns an error
You can partially update several objects in a single method call.
If the index targeted by this operation doesn’t exist yet, it’s automatically created.
When updating many or large objects, be aware of the rate limit.
This method doesn’t replace the whole record** but adds, removes, or updates the attributes you pass. The remaining attributes remain untouched. This is different from saveObjects which replaces the whole record.
You can’t individually update nested attributes. Specifying a nested attribute treats it as a replacement of its first-level ancestor. To change nested attributes, you need to use the saveObjects method. You can retrieve the object’s data by using the getObjects method.
Built-in operations
To update an attribute without pushing the entire record, you can use these built-in operations.
These operations can be helpful if you don’t have access to your initial data.
Increment: increment a numeric attribute
Decrement: decrement a numeric attribute
Add: append a number or string element to an array attribute
Remove: remove all matching number or string elements from an array attribute made of numbers or strings
AddUnique: add a number or string element to an array attribute made of numbers or strings only if it’s not already present
IncrementFrom: increment a numeric integer attribute only if the provided value matches the current value, and otherwise ignore the whole object update. For example, if you pass an IncrementFrom value of 2 for the version attribute, but the current value of the attribute is 1, the engine ignores the update. If the object doesn’t exist, the engine only creates it if you pass an IncrementFrom value of 0.
IncrementSet : increment a numeric integer attribute only if the provided value is greater than the current value, and otherwise ignore the whole object update. For example, if you pass an IncrementSet value of 2 for the version attribute, and the current value of the attribute is 1, the engine updates the object. If the object doesn’t exist yet, the engine only creates it if you pass an IncrementSet value that’s greater than 0.
For Remove and AddUnique: the operation will be silently ignored if the array attribute has any nested object or array.
You can specify an operation by providing an object with the attribute to update as the key and its value being an object with the following properties:
_operation: the operation to apply on the attribute
value: the right-hand side argument to the operation, for example, increment or decrement step, value to add or remove
Only the IncrementFrom and IncrementSet operations guarantee idempotent record updates. The other built-in operations aren’t idempotent and can cause unexpected side-effects, unless you use them in combination with the idempotent operations.
For example, if you’re using the Increment or Decrement operations in a concurrent or multi-threaded environment, you may trigger it more than once and end up with wrong data in your records.
classRecordWithPartialUpdate{privateStringobjectID;privatePartialUpdateOperation<Integer>count;publicRecord(StringobjectID,PartialUpdateOperation<Integer>count){this.objectID=objectID;this.count=count;}// Getters and setters omitted for readability}BatchIndexingResponseres=index.partialUpdateObjects(Collections.singletonList(newRecord("myID",PartialUpdateOperation.Increment(2))));
classRecordWithPartialUpdate{privateStringobjectID;@JsonProperty("_tags")privatePartialUpdateOperation<String>tags;publicRecord(StringobjectID,PartialUpdateOperation<String>tags){this.objectID=objectID;this.tags=tags;}// Getters and setters omitted for readability}BatchIndexingResponseres=index.partialUpdateObjects(Collections.singletonList(newRecord("myID",PartialUpdateOperation.AddUnique("public"))));
Update only if the value matches a numeric attribute
This example updates the version attribute using the IncrementFrom built-in operation. This ensures that this attribute is only incremented if the provided value matches.
classRecordWithPartialUpdate{privateStringobjectID;privatePartialUpdateOperation<Integer>version;publicRecord(StringobjectID,PartialUpdateOperation<Integer>version){this.objectID=objectID;this.version=version;}// Getters and setters omitted for readability}BatchIndexingResponseres=index.partialUpdateObjects(Collections.singletonList(newRecord("myID",PartialUpdateOperation.incrementFrom(2))));
classRecordWithPartialUpdate{privateStringobjectID;privatePartialUpdateOperation<Integer>lastmodified;publicRecord(StringobjectID,PartialUpdateOperation<Integer>lastmodified){this.objectID=objectID;this.lastmodified=lastmodified;}// Getters and setters omitted for readability}BatchIndexingResponseres=index.partialUpdateObjects(Collections.singletonList(newRecord("myID",PartialUpdateOperation.incrementSet(1593431913))));
default: true (false for .NET, Java, Ruby, PHP, Python, and JavaScript)
Optional
If true, updating a nonexistent object will create a new object with the objectID and the attributes defined in the object.
If false, attempting to update a nonexistent object is ignored (no error is generated).
In the Java, JavaScript, PHP, and .NET API clients, this setting defaults to false.
autoGenerateObjectIDIfNotExist
type: boolean
default: false
Optional
If true, the engine assigns an objectID to any object without objectID.
If false, the method returns an error if any objects don’t contain an objectID.
In the Java, JavaScript, PHP, and .NET API clients, this setting defaults to false.
The object needs to contain an objectID.
If you supply an unknown objectID:
If createIfNotExists is true, the method creates a new record with the supplied objectID and attributes.
If createIfNotExists is false, the method ignores the new record (without sending back an error).
Response
This section shows the JSON response returned by the API.
Each API client encapsulates this response inside objects specific to the programming language,
so that the actual response might be different.
You can view the response by using the getLogs method.
Don’t rely on the order of attributes in the response, as JSON doesn’t guarantee the ordering of keys in objects.