update

Definition

update

New in version 2.6.

The update command modifies documents in a collection. A single update command can contain multiple update statements. The update methods provided by the MongoDB drivers use this command internally.

The update command has the following syntax:

{
   update: <collection>,
   updates: [
      { q: <query>, u: <update>, upsert: <boolean>, multi: <boolean>,
        collation: <document>, arrayFilters: <array> },
      { q: <query>, u: <update>, upsert: <boolean>, multi: <boolean>,
        collation: <document>, arrayFilters: <array> },
      { q: <query>, u: <update>, upsert: <boolean>, multi: <boolean>,
        collation: <document>, arrayFilters: <array> },
      ...
   ],
   ordered: <boolean>,
   writeConcern: { <write concern> },
   bypassDocumentValidation: <boolean>
}

The command takes the following fields:

Field Type Description
update string The name of the target collection.
updates array An array of one or more update statements to perform in the named collection.
ordered boolean Optional. If true, then when an update statement fails, return without performing the remaining update statements. If false, then when an update fails, continue with the remaining update statements, if any. Defaults to true.
writeConcern document Optional. A document expressing the write concern of the update command. Omit to use the default write concern.
bypassDocumentValidation boolean

Optional. Enables update to bypass document validation during the operation. This lets you update documents that do not meet the validation requirements.

New in version 3.2.

Each element of the updates array contains the following fields:

Field Type Description
q document The query that matches documents to update. Use the same query selectors as used in the find() method.
u document The modifications to apply. For details, see Behavior.
upsert boolean Optional. If true, perform an insert if no documents match the query. If both upsert and multi are true and no documents match the query, the update operation inserts only a single document.
multi boolean Optional. If true, updates all documents that meet the query criteria. If false, limit the update to one document that meet the query criteria. Defaults to false.
collation document

Optional.

Specifies the collation to use for the operation.

Collation allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks.

The collation option has the following syntax:

collation: {
   locale: <string>,
   caseLevel: <boolean>,
   caseFirst: <string>,
   strength: <int>,
   numericOrdering: <boolean>,
   alternate: <string>,
   maxVariable: <string>,
   backwards: <boolean>
}

When specifying collation, the locale field is mandatory; all other collation fields are optional. For descriptions of the fields, see Collation Document.

If the collation is unspecified but the collection has a default collation (see db.createCollection()), the operation uses the collation specified for the collection.

If no collation is specified for the collection or for the operations, MongoDB uses the simple binary comparison used in prior versions for string comparisons.

You cannot specify multiple collations for an operation. For example, you cannot specify different collations per field, or if performing a find with a sort, you cannot use one collation for the find and another for the sort.

New in version 3.4.

arrayFilters array

Optional. An array of filter documents that determines which array elements to modify for an update operation on an array field.

In the update document, use the $[<identifier>] filtered positional operator to define an identifier, which you then reference in the array filter documents. You cannot have an array filter document for an identifier if the identifier is not included in the update document.

Note

The <identifier> must begin with a lowercase letter and contain only alphanumeric characters.

You can include the same identifier multiple times in the update document; however, for each distinct identifier ($[identifier]) in the update document, you must specify exactly one corresponding array filter document. That is, you cannot specify multiple array filter documents for the same identifier. For example, if the update statement includes the identifier x (possibly multiple times), you cannot specify the following for arrayFilters that includes 2 separate filter documents for x:

[
  { "x.a": { $gt: 85 } },
  { "x.b": { $gt: 80 } }
]

However, you can specify compound conditions on the same identifier in a single filter document, such as in the following examples:

[
  { $or: [{"x.a": {$gt: 85}}, {"x.b": {$gt: 80}}] }
]

[
  { $and: [{"x.a": {$gt: 85}}, {"x.b": {$gt: 80}}] }
]

[
  { "x.a": { $gt: 85 }, "x.b": { $gt: 80 } }
]

For examples, see Specify arrayFilters for Array Update Operations.

New in version 3.6.

Returns: A document that contains the status of the operation. See Output for details.

Behavior

The <update> document can contain either all update operator expressions or all field:value expressions.

Update Operator Expressions

If the <update> document contains all update operator expressions, as in:

{
  $set: { status: "D" },
  $inc: { quantity: 2 }
}

Then, the update command updates only the corresponding fields in the document.

Field: Value Expressions

If the <update> document contains only field:value expressions, as in:

{
  status: "D",
  quantity: 4
}

Then the update command replaces the matching document with the update document. The update command can only replace a single matching document; i.e. the multi field cannot be true. The update command does not replace the _id value.

Limits

For each update element in the updates array, the sum of the query and the update sizes (i.e. q and u ) must be less than or equal to the maximum BSON document size.

The total number of update statements in the updates array must be less than or equal to the maximum bulk size.

Document Validation

The update command adds support for the bypassDocumentValidation option, which lets you bypass document validation when inserting or updating documents in a collection with validation rules.

Examples

Update Specific Fields of One Document

Use update operators to update only the specified fields of a document.

For example, given a users collection, the following command uses the $set and $inc operators to modify the status and the points fields respectively of a document where the user equals "abc123":

db.runCommand(
   {
      update: "users",
      updates: [
         {
           q: { user: "abc123" }, u: { $set: { status: "A" }, $inc: { points: 1 } }
         }
      ],
      ordered: false,
      writeConcern: { w: "majority", wtimeout: 5000 }
   }
)

Because <update> document does not specify the optional multi field, the update only modifies one document, even if more than one document matches the q match condition.

The returned document shows that the command found and updated a single document. See Output for details.

{ "ok" : 1, "nModified" : 1, "n" : 1 }