Operador $Set de MongoDB

Tahseen Tauseef 15 febrero 2024
  1. Operador MongoDB $set
  2. Establecer campos de nivel superior
  3. Establecer campos en documentos incrustados
  4. Establecer elementos en matrices
  5. $set (Agregación)
  6. Usar dos etapas $set
  7. Agregar campos a un documento incrustado
  8. Sobrescribir un campo existente
  9. Agregar elemento a una matriz
Operador $Set de MongoDB

Con la ayuda de este artículo, aprenderá a usar el operador $set para actualizar parcialmente un objeto en MongoDB, de modo que el nuevo objeto se superponga/fusione con el existente.

El operador $set reemplaza el valor de un campo con el valor dado. La expresión del operador $set utiliza la siguiente sintaxis.

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

Especificará un <campo> en un documento incrustado o una matriz utilizando la notación de puntos.

Operador MongoDB $set

Si el campo no existe, el operador $set crea uno con el valor especificado, siempre que el nuevo campo no viole ninguna restricción.

Por ejemplo, si proporciona una ruta punteada para un campo que no existe, el operador $set generará los documentos incrustados necesarios para completar la ruta punteada.

Además, el operador $set actualizará o creará cada campo si especifica varios pares de valores de campo.

Puede crear la siguiente colección de productos.

db={
  "products": [
    {
      _id: 100,
      quantity: 250,
      instock: true,
      reorder: false,
      details: {
        model: "PTI",
        make: "Breakout"
      },
      tags: [
        "jeans",
        "clothing"
      ],
      ratings: [
        {
          by: "CustomerIK",
          rating: 3
        }
      ]
    }
  ]
}

Establecer campos de nivel superior

Para el documento que coincide con los criterios _id es igual a 100, la siguiente operación utiliza el operador $set para actualizar el valor del campo detalles, el campo cantidad y el campo etiquetas. La consulta para esto se da a continuación.

db.products.update(
   { _id: 100 },
   { $set:
      {
        quantity: 500,
        details: { model: "2600", make: "Outfitters" },
        tags: [ "coats", "outerwear", "clothing" ]
      }
   }
)

La operación anterior actualiza lo siguiente.

  1. valor de cantidad a 500.
  2. campo detalles con nuevo documento incrustado
  3. campo tags con una nueva matriz

El resultado de la consulta anterior se muestra en la siguiente captura de pantalla.

Establecer campos de nivel superior

Establecer campos en documentos incrustados

Utilizará la notación de puntos para especificar un <campo> en un documento incrustado o una matriz. Para el documento que coincide con el criterio _id igual a 100, la siguiente operación actualiza el campo hacer en el documento detalles.

La consulta para esto se da a continuación.

db.products.update(
   { _id: 100 },
   { $set: { "details.make": "Breakout Kids" } }
)

El resultado de la consulta anterior se muestra en la siguiente captura de pantalla.

Establecer campos en documentos incrustados

Establecer elementos en matrices

La siguiente acción modifica el valor del segundo elemento (array index de 1) del campo tags y el campo rating del primer elemento (array index de 0) del array ratings para el documento que cumple el criterio _id igual a 100.

La consulta para esto se da a continuación.

db.products.update(
   { _id: 100 },
   { $set:
      {
        "tags.1": "wind breaker",
        "ratings.0.rating": 2
      }
   }
)

El resultado de la consulta anterior se muestra en la siguiente captura de pantalla.

Establecer elementos en matrices

$set (Agregación)

$set (agregación) agrega nuevos campos a un documento. $set genera documentos que contienen todos los campos existentes de los documentos de entrada y los campos recién agregados.

$set (agregación) tiene la siguiente sintaxis.

{ $set: { <newField>: <expression>, ... } }

$set es un comando que agrega nuevos campos a un documento existente. El usuario puede incluir una o más etapas $set en una operación de agregación.

Use la notación de puntos para agregar campos o campos a documentos incrustados (incluidos documentos en matrices). Use $concatArrays para agregar un elemento a un campo de matriz existente usando $set.

Usar dos etapas $set

Cree una colección de “calificaciones” de muestra con lo siguiente.

db={
  "grades": [
    {
      _id: 1,
      student: "Ali",
      homework: [10, 8, 9],
      quiz: [9, 8],
      extraCredit: 3
    },
    {
      _id: 2,
      student: "Manahil",
      homework: [3, 8, 5],
      quiz: [7, 9],
      extraCredit: 6
    }
  ]
}

Se utilizan dos etapas $set en el siguiente proceso para agregar tres nuevos campos a los documentos de salida. La consulta para esto se da a continuación.

db.grades.aggregate( [
   {
     $set: {
        totalHomework: { $sum: "$homework" },
        totalQuiz: { $sum: "$quiz" }
     }
   },
   {
     $set: {
        totalScore: { $add: [ "$totalHomework", "$totalQuiz", "$extraCredit" ] } }
   }
] )

La operación devuelve los siguientes documentos, como se muestra en la siguiente captura de pantalla.

Usar dos escenarios establecidos

Agregar campos a un documento incrustado

Cree una colección de muestra transporte con lo siguiente.

db={
  "transport": [
    {
      _id: 1,
      type: "sedan",
      specs: { doors: 4, wheels: 4}
    },
    {
      _id: 2,
      type: "motorbike",
      specs: {doors: 0, wheels: 2}
    },
    {
      _id: 3,
      type: "jet ski"
    }
  ]
}

La siguiente operación de agregación crea un nuevo campo fuel_type en el documento incrustado specs. La consulta para esto se da a continuación.

db.transport.aggregate( [
   { $set: { "specs.fuel_type": "super" } }
] )

La operación devuelve los siguientes resultados, como se muestra en la siguiente captura de pantalla.

Agregar campos a un documento incrustado

Sobrescribir un campo existente

Cuando una operación $set especifica un nombre de campo existente, se reemplaza el campo original. Haz una colección de muestras de mascotas con los siguientes artículos.

db={
  "pets": [
    {
      _id: 1,
      dogs: 10,
      cats: 5
    }
  ]
}

La operación $set que sigue anula el campo cats. La consulta para esto se da a continuación.

db.pets.aggregate( [
  { $set: { "cats": 20 } }
] )

La operación devuelve el siguiente documento, como se muestra en la siguiente captura de pantalla.

Sobrescribir un campo existente

Agregar elemento a una matriz

Cree una colección de calificaciones de muestra con los siguientes registros.

db={
  "grades": [
    {
      _id: 1,
      student: "Ali",
      homework: [10, 8, 9],
      quiz: [9, 8],
      extraCredit: 3
    },
    {
      _id: 2,
      student: "Manahil",
      homework: [3, 8, 5],
      quiz: [7, 9],
      extraCredit: 6
    }
  ]
}

El usuario puede utilizar el operador $set con una expresión $concatArrays. Esto agrega un elemento a un campo de matriz existente.

La siguiente operación utiliza $set para reemplazar el campo tarea con una nueva matriz cuyos elementos son la matriz actual de tarea concatenada con otra matriz que contiene una nueva puntuación [ 7 ]. La consulta para esto se da a continuación.

db.grades.aggregate([
   { $match: { _id: 2 } },
   { $set: { homework: { $concatArrays: [ "$homework", [ 7 ] ] } } }
])

La operación devuelve el siguiente documento, como se muestra en la siguiente captura de pantalla.

Agregar elemento a una matriz

En este artículo, aprendió a usar el operador $set para actualizar parcialmente un objeto en MongoDB para que el nuevo objeto se superponga/fusione con el existente.

Artículo relacionado - MongoDB Operator