DocumentMutation.setOrReplaceNull()

Either creates a new field in a document and gives the field a null value, or replaces the value of an existing field with a null value.

Operations Performed

Verifies that a field at the specified path exists.
  • If the field exists, changes its value to null.
  • If the field does not exist, creates the field and gives it a null value.
NOTE: If an application tries to set a new value in an array and gives the value an index higher than (current largest index) + 1, then the value is given the index (current last index) + 1. For example, suppose that an application tries to set a value at index 5 in an array for which the current largest index is 2. MapR-DB assigns the value an index of 3 when inserting the value into the array.

Permissions Required

  • The writeAce permission on the volumes where the JSON tables that contain the documents are located. For information about how to set permissions on volumes, see Setting/Modifying Whole Volume ACEs.
  • writeperm on the field, if it exists
  • writeperm on the parent field, if the specified field does not exist

See How to Obtain readperm or writeperm on a Field.

Link to Javadoc

DocumentMutation

IMPORTANT: If a DocumentMutation object modifies a field two or more times, only the final operation on that field is applied.

Example One

table.update() in the last line fails with error code 22:

DBDocument doc = MapRDB.newDocument()
        .set("int", 100)
        .set("date", new Date(1000))
        .set("string", "a string");

table.insertOrReplace("doc1", doc);

// Set different fields
DocumentMutation mutation = MapRDB.newDocumentMutation();
mutation.setOrReplace("string", 1000);
mutation.set("string", 2000);

table.update("doc1", mutation);

Example Two

This code results in the document {"string":"a string add3"}, rather than the document {"string":"a string add1 add2 add3"}.

DBDocument doc = MapRDB.newDocument()
        .set("string", "a string");

table.insertOrReplace("doc1", record);

DocumentMutation mutation = MapRDB.newDocumentMutation();
mutation.append("string", " add1");
mutation.append("string", " add2");
mutation.append("string", " add3");

table.update("doc1", mutation);