$setOnInsert - Amazon DocumentDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

$setOnInsert

El $setOnInsert operador de Amazon DocumentDB se utiliza para establecer el valor de un campo si se está insertando un documento, pero no tiene ningún efecto si el documento se está actualizando.

Parámetros

  • field: El campo que se va a configurar.

  • value: el valor que se va a asignar al campo.

Ejemplo (MongoDB Shell)

En el siguiente ejemplo, se muestra el uso del $setOnInsert operador en Amazon DocumentDB. Crea un documento nuevo si el documento aún no existe, pero no tiene ningún efecto si el documento se está actualizando.

Crea documentos de muestra

db.users.insertOne({ _id: 1, name: "John Doe", age: 30 })

Ejemplo de consulta 1: Actualizar un documento existente

db.users.update( { _id: 1 }, { $set: { age: 31 }, $setOnInsert: { createdAt: new Date() } }, { upsert: true } )

Resultado 1

{ _id: 1, name: "John Doe", age: 31 }

El resultado muestra que el documento se actualizó, pero el createdAt campo NO se agregó porque el documento ya existía. El $setOnInsert operador solo se aplica al insertar documentos nuevos.

Ejemplo de consulta 2: Insertar un documento nuevo (parte superior)

db.users.update( { _id: 2 }, { $set: { name: "Jane Smith", age: 25 }, $setOnInsert: { createdAt: new Date() } }, { upsert: true } )

Salida 2

{ _id: 2, name: "Jane Smith", age: 25, createdAt: ISODate("2025-10-31T09:57:52.459Z") } }

Ejemplos de código

Para ver un ejemplo de código para usar el $setOnInsert comando, elija la pestaña del idioma que desee usar:

Node.js
const { MongoClient } = require('mongodb'); async function updateWithSetOnInsert() { const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); const db = client.db('test'); const users = db.collection('users'); await users.updateOne( { _id: 1 }, { $set: { age: 31 }, $setOnInsert: { createdAt: new Date() } }, { upsert: true } ); const updatedUser = await users.findOne({ _id: 1 }); console.log(updatedUser); await client.close(); } updateWithSetOnInsert();
Python
from pymongo import MongoClient def update_with_set_on_insert(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') db = client['test'] users = db['users'] result = users.update_one( {'_id': 1}, { '$set': {'age': 31}, '$setOnInsert': {'createdAt': datetime.datetime.now()} }, upsert=True ) updated_user = users.find_one({'_id': 1}) print(updated_user) client.close() update_with_set_on_insert()