Conflict Resolution
-
Define the server behaviour upon a conflict between documents.
-
Conflicts that are created can be manually resolved in Documents Conflicts View.
-
In this page:
The Conflicts Resolution View
Conflict Resolution
-
Save, Add, Modify or Delete conflict resolution scripts.
-
Set default behaviour - Conflicts will be created only if:
- This option is unchecked and no script is defined
- This option is unchecked and the script is defined but returns null
-
Resolution Script (optional)
-
Supply a javaScript function to resolve the conflicting documents.
-
The object that is returned by the script will be used as the conflict resolution in the document.
-
The sript is defined per collection
-
Note: in case the script returns null (either intentionally, or upon some error),
the server will resolve the conflict according to the defined default behaviour
(i.e. resolve by using latest version or creating a conflict for the user to resolve). -
Script Variables:
- docs - the conflicted documents objects array
- hasTombstone - true if either of the conflicted documents was deleted
- resolveToTombstone - return this value from script if the resolution wanted is to delete this document
-
Script Examples
- 1. Resolve according to field content - return the highest value of the field
// First conflicting document
{
"Name": "John",
"MaxRecord": 43
}
// Second conflicting document
{
"Name": "John",
"MaxRecord": 80
}
// The resolving script:
var maxRecord = 0;
for (var i = 0; i < docs.length; i++) {
maxRecord = Math.max(docs[i].maxRecord, maxRecord);
}
docs[0].MaxRecord = maxRecord;
return docs[0];
- 2. Resolve by deleting the document
if (hasTombstone) {
return resolveToTombstone;
}
- 3. The metadata can also be accessed - return the document that has the largest number of attachments
var result = docs[0];
for (var i = 1; i < docs.length; i++) {
if (docs[i]["@metadata"]["@attachments"].length > result["@metadata"]["@attachments"].length)
result = docs[i];
}
}
return result;