Atualizar Arrays no MongoDB

MongoDBMongoDBBeginner
Pratique Agora

💡 Este tutorial foi traduzido do inglês com assistência de IA. Para ver o original, você pode mudar para a versão em inglês

Introdução

Neste laboratório, você aprenderá como atualizar arrays do MongoDB usando várias técnicas, incluindo a adição de novos elementos (push), a remoção de itens do array (pull), a atualização de elementos do array, a adição a conjuntos de arrays e a remoção de duplicatas. O laboratório cobre exemplos práticos e instruções passo a passo para ajudá-lo a dominar o gerenciamento de arrays em seus bancos de dados MongoDB. Você explorará como modificar dinamicamente os dados do documento e manter a integridade de suas estruturas baseadas em arrays.

O laboratório começa demonstrando como adicionar novos elementos a arrays usando o operador $push. Em seguida, aborda o operador $pull, que permite remover itens específicos de arrays. Além disso, você aprenderá como atualizar elementos individuais do array, adicionar elementos a conjuntos de arrays e remover duplicatas de arrays. Essas técnicas o equiparão com as habilidades necessárias para trabalhar efetivamente com arrays e documentos embutidos em suas aplicações MongoDB.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL 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(("MongoDB")) -.-> mongodb/ArrayandEmbeddedDocumentsGroup(["Array and Embedded Documents"]) 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{{"Atualizar Arrays no MongoDB"}} mongodb/find_documents -.-> lab-422095{{"Atualizar Arrays no MongoDB"}} mongodb/work_with_array_data_types -.-> lab-422095{{"Atualizar Arrays no MongoDB"}} mongodb/manage_array_elements -.-> lab-422095{{"Atualizar Arrays no MongoDB"}} mongodb/query_embedded_documents -.-> lab-422095{{"Atualizar Arrays no MongoDB"}} mongodb/aggregate_group_totals -.-> lab-422095{{"Atualizar Arrays no MongoDB"}} end

Adicionar Novos Elementos (Push New Elements)

Nesta etapa, você aprenderá como adicionar novos elementos a arrays no MongoDB usando o operador $push. Arrays no MongoDB são poderosos e flexíveis, permitindo que você modifique dinamicamente os dados do seu documento.

Primeiro, vamos iniciar o shell do MongoDB e criar um banco de dados para o nosso laboratório:

mongosh
use arraylab

Agora, vamos criar uma coleção chamada students com um documento inicial que possui um array de cursos:

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

Para adicionar um novo curso à lista de cursos de Alice, usaremos o operador $push:

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

Vamos verificar a atualização encontrando o documento de Alice:

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

Exemplo de saída:

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

O operador $push permite que você adicione elementos a um array. Neste exemplo, adicionamos "Data Structures" à lista de cursos de Alice.

Você também pode adicionar múltiplos elementos de uma vez usando $push com o modificador $each:

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

Isso adiciona tanto "Physics" quanto "Chemistry" ao array de cursos de Alice.

Remover Itens do Array (Pull Array Items)

Nesta etapa, você aprenderá como remover elementos de arrays no MongoDB usando o operador $pull. Dando continuidade à etapa anterior, continuaremos trabalhando com nossa coleção students no banco de dados arraylab.

Primeiro, certifique-se de estar no shell do MongoDB e usando o banco de dados correto:

mongosh
use arraylab

Vamos verificar nosso documento de estudante existente:

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

Para remover um item específico de um array, usaremos o operador $pull. Vamos remover o curso "Physics" dos cursos de Alice:

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

Agora, vamos verificar o documento atualizado:

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

Exemplo de saída:

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

Você também pode remover múltiplos itens específicos usando $pull com um array de valores:

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

O operador $pullAll remove todos os valores especificados do array em uma única operação.

Vamos verificar o estado final dos cursos de Alice:

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

Exemplo de saída:

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

Atualizar Elementos do Array (Update Array Elements)

Nesta etapa, você aprenderá como atualizar elementos específicos dentro de um array no MongoDB usando operadores posicionais e de filtragem de array.

Primeiro, certifique-se de estar no shell do MongoDB e usando o banco de dados correto:

mongosh
use arraylab

Vamos criar um documento mais complexo com um array de cursos de estudantes:

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

Para atualizar um elemento específico em um array, usaremos o operador posicional $. Vamos atualizar a nota para Computer Science:

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

Vamos verificar a atualização:

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

Exemplo de saída:

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

Também podemos usar o operador $[] para atualizar todos os elementos em um array. Vamos adicionar um semestre a todos os cursos:

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

Vamos verificar o documento final:

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

Exemplo de saída:

[
  {
    _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' }
    ]
  }
]

Adicionar a Conjuntos de Array (Add To Array Sets)

Nesta etapa, você aprenderá como adicionar elementos únicos a um array usando o operador $addToSet no MongoDB, que impede entradas duplicadas.

Primeiro, certifique-se de estar no shell do MongoDB e usando o banco de dados correto:

mongosh
use arraylab

Vamos criar um novo documento com um array de habilidades de um estudante:

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

O operador $addToSet adiciona um elemento a um array somente se ele ainda não existir:

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

Vamos verificar o documento:

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

Exemplo de saída:

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

Observe que "Python" não foi adicionado novamente porque já existia.

Você também pode adicionar múltiplos elementos únicos de uma vez usando $addToSet com $each:

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

Vamos verificar o documento final:

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

Exemplo de saída:

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

Observe como "Python" não foi duplicado, enquanto as novas habilidades foram adicionadas.

Remover Duplicatas (Remove Duplicates)

Nesta etapa, você aprenderá como remover elementos duplicados de um array no MongoDB usando agregação e operações de atualização.

Primeiro, certifique-se de estar no shell do MongoDB e usando o banco de dados correto:

mongosh
use arraylab

Vamos criar um documento com habilidades duplicadas:

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

Para remover duplicatas, usaremos o operador $addToSet, que elimina automaticamente duplicatas:

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

Alternativamente, podemos usar um pipeline de agregação para remover duplicatas:

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

Vamos verificar o documento:

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

Exemplo de saída:

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

Também podemos demonstrar a remoção de duplicatas, mantendo a ordem original da primeira aparição:

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

Vamos fazer uma verificação final:

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

Resumo (Summary)

Neste laboratório, você aprendeu como atualizar arrays do MongoDB usando vários operadores. Primeiro, você aprendeu a adicionar novos elementos a arrays usando o operador $push, incluindo a adição de múltiplos elementos de uma vez. Em seguida, você explorou como remover itens específicos de arrays usando o operador $pull. Adicionalmente, você descobriu como atualizar elementos individuais dentro de um array e como adicionar elementos a um conjunto de array para evitar duplicatas. Essas técnicas fornecem uma base sólida para gerenciar dinamicamente dados de array em suas aplicações MongoDB.

OSZAR »