Update API

Math operators, field operators and array operators.

Although it is possible in MongoDB to use the direct field updates (no operator, {age:5}),this is not supported in TyDB to enforce a more strict type declaration.

Field operators

$set

Applies to: any field type.

Syntax:

{
    $set: {
        <fieldName1>: <value1>,
        <fieldName2>: <value2>,
        ...etc
    }
}

Explanation: Sets the value of a field in a document.

$unset

Applies to: any field type.

Syntax:

{
    $unset: {
        <fieldName1>: "",
        <fieldName2>: "",
        ...etc
    }
}

Explanation: Sets the specified field to undefined.

$setOnInsert

Applies to: any field type.

Syntax:

{
    $setOnInsert: Model.new({ age: 3 }),
}

Explanation: If an upsert operation has resulted in an insert of a document, then $setOnInsert assigns the specified values to the fields in the document. If the update operation does not result in an insert, $setOnInsert does nothing. $setOnInsert can only take a full model, so you must use Model.new({ ... props }) with it.

$rename

Applies to: any field type.

Syntax:

{
    $rename: {
        <fieldNameA>: <fieldNameB>,
        <fieldNameC>: <fieldNameD>,
        ...etc
    }
}

Explanation: renames the specified field to a new field name.

$currentDate

Applies to: number or Date.

Syntax:

{
    $currentDate: {
        // sets the field to Date object
        // of the current date
        <fieldName1>: true,
        <fieldName2>: { $type: "date" },
        // sets the field to a timestamp
        // of the current date
        <fieldName3>: { $type: "timestamp" },
        ...etc
    }
}

Explanation: Sets the value of a field in a document to the current timestamp or Date object.

Mathematical operators

$inc

Applies to: number.

Syntax:

{
    $inc: {
        <fieldName1>: <number>,
        <fieldName2>: <number>,
        <fieldName3>: <number>,
        ... etc
    }
}

Explanation: Increments the value of the field by the specified amount.

$mul

Applies to: number.

Syntax:

{
    $mul: {
        <fieldName1>: <number>,
        <fieldName2>: <number>,
        <fieldName3>: <number>,
        ... etc
    }
}

Explanation: Multiplies the value of the field by the specified number.

$min

Applies to: number and Date.

Syntax:

{
    $min: {
        <fieldName1>: <value>,
        <fieldName2>: <value>,
        <fieldName3>: <value>,
        ... etc
    }
}

Explanation: Only updates the field if the specified value is less than the existing field value.

$max

Applies to: number and Date.

Syntax:

{
    $max: {
        <fieldName1>: <value>,
        <fieldName2>: <value>,
        <fieldName3>: <value>,
        ... etc
    }
}

Explanation: Only updates the field if the specified value is more than the existing field value.

Array operators

$addToSet

Applies to: Array.

Syntax:

{
    $addToSet: {
        // adds a single value
        <fieldName1>: <value>,
        // adds multiple values
        <fieldName2>: {
            $each: [
                <value1>,
                <value2>,
                <value3>,
                ... etc
            ]
        }
    }
}

Explanation: Adds elements to an array only if they do not already exist in the set.

$pop

Applies to: Array.

Syntax:

{
    $pop: {
        // removes first element
        <fieldName1>: -1,
        // removes last element
        <fieldName2>: 1
    }
}

Explanation: removes the first or last element of an array. Pass $pop a value of -1 to remove the first element of an array and 1 to remove the last element in an array.

$pull

Applies to: Array.

Syntax:

{
    $pull: {
        // remove by value
        <fieldName1>: <value>,
        // or remove by condition
        <fieldName2>: <query>
    }
}

Explanation: Removes all array elements that match a specified query or value.

$pullAll

Applies to: Array.

Syntax:

{
    $pop: {
        <fieldName1>: [<value1>, <value2> ... etc],
        <fieldName2>: [<value1>, <value2> ... etc],
        ... etc
    }
}

Explanation: The $pullAll operator removes all instances of the specified values from an existing array.

Unlike the $pull operator that removes elements by specifying a query, $pullAll removes elements that match the listed values.

$push

Applies to: Array.

Syntax:

{
    $push: {
        <fieldName1>: <value>,
        // or
        <fieldName2>: {
        
            // multiple fields
            $each: [<value1>, <value2>, ...etc]
            
            // with modifiers
            // discussed below
            $slice: <number>,
            $position: <number>,
            $sort: <sort-specification>
            
        },
        ... etc
    }
}

Explanation: The $push operator appends a specified value to an array.

Array push modifiers

$each

Applies to: Array.

Syntax:

{
    $push: {
        <fieldname>: {
            // multiple fields
            $each: [<value1>, <value2>, ...etc]
        },
        ... etc
    }
}

Explanation: Modifies the $push and $addToSet operators to append multiple items for array updates.

$slice

Applies to: Array.

Syntax:

{
    $push: {
        <fieldname>: {
            // multiple fields
            $each: [<value1>, <value2>, ...etc],
            $slice: <number>
        },
        ... etc
    }
}

Explanation: Modifies the $push operator to limit the size of updated arrays.

Must be used with $each modifier. Otherwise it will throw. You can pass an empty array ([ ]) to the $each modifier such that only the $slice modifier has an effect.

$position

Applies to: Array.

Syntax:

{
    $sort: {
        <fieldname>: {
            // multiple fields
            $each: [<value1>, <value2>, ...etc],
            $position: <number>
        },
        ... etc
    }
}

Explanation: The $position modifier specifies the location in the array at which the $push operator insert elements. Without the $position modifier, the $push operator inserts elements to the end of the array.

Must be used with $each modifier.

$sort

Applies to: Array.

Syntax:

{
    $sort: {
        <fieldname>: {
            // multiple fields
            $each: [<value1>, <value2>, ...etc],
            $sort: -1 | 1
            // or when sorting embedded
            // documents inside the array
            $sort: {
                <fieldName1>: 1 | -1,
                <fieldName2>: 1 | -1
            }
        },
        ... etc
    }
}

Explanation: The $sort modifier orders the elements of an array during a $push operation. Pass 1 to sort ascending and -1 to sort descending.

Must be used with $each modifier. Otherwise it will throw. You can pass an empty array ([ ]) to the $each modifier such that only the $sort modifier has an effect.

Last updated