Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$addToSet (operador de actualización)

$addToSet

El operador agrega un valor a una matriz a $addToSet $addToSet menos que el valor ya esté presente, en cuyo caso no hace nada a esa matriz.

Puedes usar $addToSet para implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

El operador tiene la $addToSet forma:

{ $addToSet: { <field1>: <value1>, ... } }

Para especificar un <field> en un documento incrustado o en un arreglo, utiliza notación de puntos.

A partir de MongoDB 5.0, los operadores de actualización procesan los campos de documentos con nombres basados en cadenas en orden lexicográfico. Los campos con nombres numéricos se procesan en orden numérico. Consulta Comportamiento del operador de actualización para obtener más información.

$addToSet solo garantiza que no se agreguen elementos duplicados al conjunto y no afecta a los elementos duplicados existentes. no garantiza un orden particular de los elementos en el conjunto $addToSet modificado.

A partir de MongoDB 5.0, mongodya no genera un error cuando se utiliza un operador de actualización como$addToSetcon una expresión de operando vacía ( { } ). Una actualización vacía no produce cambios y no se crea ninguna entrada en el oplog (lo que significa que la operación no tiene efecto).

Si utiliza en un campo que no está $addToSet $addToSet presente en el documento que desea actualizar, crea el campo de matriz con el valor especificado como su elemento.

Si utiliza en un $addToSet campo que no es una matriz, la operación falla.

Por ejemplo, cree la colección pigments:

db.pigments.insertOne( { _id: 1, colors: "blue, green, red" } )

El colors campo no es una matriz. La siguiente operación $addToSet falla:

db.pigments.updateOne(
{ _id: 1 },
{ $addToSet: { colors: "mauve" } }
)

Si el valor es una matriz, agrega toda$addToSet la matriz como un solo elemento.

Crear la colección alphabet:

db.alphabet.insertOne( { _id: 1, letters: ["a", "b"] } )

La siguiente operación agrega el arreglo [ "c", "d" ] al campo letters:

db.alphabet.updateOne(
{ _id: 1 },
{ $addToSet: { letters: [ "c", "d" ] } }
)

El arreglo [ "c", "d" ] se añade como un único elemento:

{ _id: 1, letters: [ 'a', 'b', [ 'c', 'd' ] ] }

Tip

Para agregar cada elemento del valor por separado, use el $each modificador con. Consulte el modificador $addToSet para $each obtener más detalles.

Si el valor es un documento, MongoDB determina que el documento es un duplicado si un documento existente en el arreglo coincide exactamente con el documento que se va a agregar. Es decir, el documento existente tiene exactamente los mismos campos y valores y los campos están en el mismo orden. El orden de los campos es importante y no puede especificar que MongoDB compare solo un subconjunto de los campos del documento para determinar si el documento es un duplicado de un elemento existente en el arreglo.

Crear la colección inventory:

db.inventory.insertOne(
{ _id: 1, item: "polarizing_filter", tags: [ "electronics", "camera" ] }
)

La siguiente operación añade el elemento "accessories" al arreglo tags dado que "accessories" no existe en el arreglo:

db.inventory.updateOne(
{ _id: 1 },
{ $addToSet: { tags: "accessories" } }
)

La siguiente operación no tiene efecto $addToSet porque "camera" ya es un elemento del tags array:

db.inventory.updateOne(
{ _id: 1 },
{ $addToSet: { tags: "camera" } }
)

Puedes usar el operador$addToSetcon el modificador$each. El modificador$eachpermite que el operador$addToSetagregue múltiples valores al campo de la matriz.

Una colección inventory tiene el siguiente documento:

db.inventory.insertOne (
{ _id: 2, item: "cable", tags: [ "electronics", "supplies" ] }
)

Luego, la siguiente operación utiliza el operador$addToSetcon el modificador$eachpara agregar múltiples elementos al array tags:

db.inventory.updateOne(
{ _id: 2 },
{ $addToSet: { tags: { $each: [ "camera", "electronics", "accessories" ] } } }
)

La operación solo agrega "camera" y "accessories" al arreglo tags. "electronics" ya estaba en el arreglo:

{
_id: 2,
item: "cable",
tags: [ "electronics", "supplies", "camera", "accessories" ]
}