Actualizar matrices en MongoDB

MongoDBMongoDBBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá a actualizar matrices en MongoDB utilizando varias técnicas, como agregar nuevos elementos, extraer elementos de la matriz, actualizar elementos de la matriz, agregar a conjuntos de matriz y eliminar duplicados. El laboratorio incluye ejemplos prácticos y instrucciones detalladas para ayudarlo a dominar la gestión de matrices en sus bases de datos MongoDB. Explorará cómo modificar dinámicamente los datos de los documentos y mantener la integridad de sus estructuras basadas en matrices.

El laboratorio comienza demostrando cómo agregar nuevos elementos a las matrices utilizando el operador $push. Luego, cubre el operador $pull, que le permite eliminar elementos específicos de las matrices. Además, aprenderá cómo actualizar elementos individuales de la matriz, agregar elementos a conjuntos de matriz y eliminar duplicados de las matrices. Estas técnicas le proporcionarán las habilidades necesarias para trabajar efectivamente con matrices y documentos incrustados en sus aplicaciones MongoDB.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/ArrayandEmbeddedDocumentsGroup(["Array and Embedded Documents"]) mongodb(("MongoDB")) -.-> mongodb/AggregationOperationsGroup(["Aggregation Operations"]) mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb(("MongoDB")) -.-> mongodb/DataTypesGroup(["Data Types"]) mongodb/BasicOperationsGroup -.-> mongodb/update_document("Update Document") mongodb/QueryOperationsGroup -.-> mongodb/find_documents("Find Documents") mongodb/DataTypesGroup -.-> mongodb/work_with_array_data_types("Work with Array Data Types") mongodb/DataTypesGroup -.-> mongodb/manage_array_elements("Manage Array Elements") mongodb/ArrayandEmbeddedDocumentsGroup -.-> mongodb/query_embedded_documents("Query Embedded Documents") mongodb/AggregationOperationsGroup -.-> mongodb/aggregate_group_totals("Aggregate Group Totals") subgraph Lab Skills mongodb/update_document -.-> lab-422095{{"Actualizar matrices en MongoDB"}} mongodb/find_documents -.-> lab-422095{{"Actualizar matrices en MongoDB"}} mongodb/work_with_array_data_types -.-> lab-422095{{"Actualizar matrices en MongoDB"}} mongodb/manage_array_elements -.-> lab-422095{{"Actualizar matrices en MongoDB"}} mongodb/query_embedded_documents -.-> lab-422095{{"Actualizar matrices en MongoDB"}} mongodb/aggregate_group_totals -.-> lab-422095{{"Actualizar matrices en MongoDB"}} end

Agregar nuevos elementos

En este paso, aprenderá a agregar nuevos elementos a matrices en MongoDB utilizando el operador $push. Las matrices en MongoDB son poderosas y flexibles, lo que le permite modificar dinámicamente los datos de su documento.

Primero, iniciemos la shell de MongoDB y creemos una base de datos para nuestro laboratorio:

mongosh
use arraylab

Ahora, creemos una colección llamada students con un documento inicial que tiene una matriz de cursos:

db.students.insertOne({
    name: "Alice Johnson",
    courses: ["Mathematics", "Computer Science"]
})

Para agregar un nuevo curso a la lista de cursos de Alice, usaremos el operador $push:

db.students.updateOne(
    { name: "Alice Johnson" },
    { $push: { courses: "Data Structures" } }
)

Verifiquemos la actualización buscando el documento de Alice:

db.students.find({ name: "Alice Johnson" })

Salida de ejemplo:

[
  {
    _id: ObjectId("..."),
    name: 'Alice Johnson',
    courses: [ 'Mathematics', 'Computer Science', 'Data Structures' ]
  }
]

El operador $push le permite agregar elementos a una matriz. En este ejemplo, agregamos "Data Structures" a la lista de cursos de Alice.

También puede agregar múltiples elementos a la vez usando $push con el modificador $each:

db.students.updateOne(
    { name: "Alice Johnson" },
    { $push: { courses: { $each: ["Physics", "Chemistry"] } } }
)

Esto agrega tanto "Physics" como "Chemistry" al arreglo de cursos de Alice.

Extraer elementos de la matriz

En este paso, aprenderá a eliminar elementos de matrices en MongoDB utilizando el operador $pull. A partir del paso anterior, continuaremos trabajando con nuestra colección students en la base de datos arraylab.

Primero, asegúrese de estar en la shell de MongoDB y de utilizar la base de datos correcta:

mongosh
use arraylab

Verifiquemos nuestro documento de estudiante existente:

db.students.find({ name: "Alice Johnson" })

Para eliminar un elemento específico de una matriz, usaremos el operador $pull. Vamos a eliminar el curso de "Física" de los cursos de Alice:

db.students.updateOne(
    { name: "Alice Johnson" },
    { $pull: { courses: "Physics" } }
)

Ahora, echemos un vistazo al documento actualizado:

db.students.find({ name: "Alice Johnson" })

Salida de ejemplo:

[
  {
    _id: ObjectId("..."),
    name: 'Alice Johnson',
    courses: [ 'Mathematics', 'Computer Science', 'Data Structures', 'Chemistry' ]
  }
]

También puede eliminar múltiples elementos específicos utilizando $pull con una matriz de valores:

db.students.updateOne(
    { name: "Alice Johnson" },
    { $pullAll: { courses: ["Mathematics", "Chemistry"] } }
)

El operador $pullAll elimina todos los valores especificados de la matriz en una sola operación.

Verifiquemos el estado final de los cursos de Alice:

db.students.find({ name: "Alice Johnson" })

Salida de ejemplo:

[
  {
    _id: ObjectId("..."),
    name: 'Alice Johnson',
    courses: [ 'Computer Science', 'Data Structures' ]
  }
]

Actualizar elementos de la matriz

En este paso, aprenderá a actualizar elementos específicos dentro de una matriz en MongoDB utilizando operadores de posición y filtrado de matriz.

Primero, asegúrese de estar en la shell de MongoDB y de utilizar la base de datos correcta:

mongosh
use arraylab

Vamos a crear un documento más complejo con una matriz de cursos de estudiantes:

db.students.insertOne({
    name: "Bob Smith",
    courses: [
        { name: "Mathematics", grade: "B" },
        { name: "Computer Science", grade: "A" },
        { name: "Physics", grade: "C" }
    ]
})

Para actualizar un elemento específico en una matriz, usaremos el operador posicional $. Vamos a actualizar la calificación de Ciencias de la Computación:

db.students.updateOne(
    { name: "Bob Smith", "courses.name": "Computer Science" },
    { $set: { "courses.$.grade": "A+" } }
)

Vamos a verificar la actualización:

db.students.find({ name: "Bob Smith" })

Salida de ejemplo:

[
  {
    _id: ObjectId("..."),
    name: 'Bob Smith',
    courses: [
      { name: 'Mathematics', grade: 'B' },
      { name: 'Computer Science', grade: 'A+' },
      { name: 'Physics', grade: 'C' }
    ]
  }
]

También podemos usar el operador $[] para actualizar todos los elementos de una matriz. Vamos a agregar un semestre a todos los cursos:

db.students.updateOne(
    { name: "Bob Smith" },
    { $set: { "courses.$[].semester": "Fall 2023" } }
)

Echemos un vistazo al documento final:

db.students.find({ name: "Bob Smith" })

Salida de ejemplo:

[
  {
    _id: ObjectId("..."),
    name: 'Bob Smith',
    courses: [
      { name: 'Mathematics', grade: 'B', semester: 'Fall 2023' },
      { name: 'Computer Science', grade: 'A+', semester: 'Fall 2023' },
      { name: 'Physics', grade: 'C', semester: 'Fall 2023' }
    ]
  }
]

Agregar a conjuntos de matriz

En este paso, aprenderá a agregar elementos únicos a una matriz utilizando el operador $addToSet en MongoDB, que evita entradas duplicadas.

Primero, asegúrese de estar en la shell de MongoDB y de utilizar la base de datos correcta:

mongosh
use arraylab

Vamos a crear un nuevo documento con una matriz de habilidades de un estudiante:

db.students.insertOne({
    name: "Emma Wilson",
    skills: ["Python", "JavaScript"]
})

El operador $addToSet agrega un elemento a una matriz solo si no existe ya:

db.students.updateOne(
    { name: "Emma Wilson" },
    { $addToSet: { skills: "Python" } }
)

Verifiquemos el documento:

db.students.find({ name: "Emma Wilson" })

Salida de ejemplo:

[
  {
    _id: ObjectId("..."),
    name: 'Emma Wilson',
    skills: ['Python', 'JavaScript']
  }
]

Note que "Python" no se agregó nuevamente porque ya existía.

También puede agregar múltiples elementos únicos a la vez usando $addToSet con $each:

db.students.updateOne(
    { name: "Emma Wilson" },
    { $addToSet: {
        skills: {
            $each: ["React", "Node.js", "Python", "TypeScript"]
        }
    } }
)

Echemos un vistazo al documento final:

db.students.find({ name: "Emma Wilson" })

Salida de ejemplo:

[
  {
    _id: ObjectId("..."),
    name: 'Emma Wilson',
    skills: ['Python', 'JavaScript', 'React', 'Node.js', 'TypeScript']
  }
]

Note cómo "Python" no se duplicó, mientras que se agregaron las nuevas habilidades.

Eliminar duplicados

En este paso, aprenderá a eliminar elementos duplicados de una matriz en MongoDB utilizando operaciones de agregación y actualización.

Primero, asegúrese de estar en la shell de MongoDB y de utilizar la base de datos correcta:

mongosh
use arraylab

Vamos a crear un documento con habilidades duplicadas:

db.students.insertOne({
    name: "Michael Chen",
    skills: ["Python", "JavaScript", "Python", "React", "JavaScript", "Node.js"]
})

Para eliminar los duplicados, usaremos el operador $addToSet, que elimina automáticamente los duplicados:

db.students.updateOne(
    { name: "Michael Chen" },
    { $set: { skills: { $setUnique: "$skills" } } }
)

Alternativamente, podemos usar una canalización de agregación para eliminar los duplicados:

db.students.aggregate([
    { $match: { name: "Michael Chen" } },
    { $project: {
        name: 1,
        skills: { $setUnique: "$skills" }
    } },
    { $merge: { into: "students", on: "name", whenMatched: "replace" } }
])

Verifiquemos el documento:

db.students.find({ name: "Michael Chen" })

Salida de ejemplo:

[
  {
    _id: ObjectId("..."),
    name: 'Michael Chen',
    skills: ['Python', 'JavaScript', 'React', 'Node.js']
  }
]

También podemos demostrar cómo eliminar los duplicados manteniendo el orden original de aparición:

db.students.updateOne(
    { name: "Michael Chen" },
    { $set: {
        skills: Array.from(new Set(db.students.findOne({ name: "Michael Chen" }).skills))
    } }
)

Realicemos una última comprobación:

db.students.find({ name: "Michael Chen" })

Resumen

En este laboratorio, aprendió a actualizar matrices en MongoDB utilizando varios operadores. Primero, aprendió a agregar nuevos elementos a las matrices utilizando el operador $push, incluyendo empujar múltiples elementos a la vez. Luego, exploró cómo eliminar elementos específicos de las matrices utilizando el operador $pull. Además, descubrió cómo actualizar elementos individuales dentro de una matriz y cómo agregar elementos a un conjunto de matriz para evitar duplicados. Estas técnicas proporcionan una base sólida para la gestión dinámica de datos de matriz en sus aplicaciones de MongoDB.