MongoDB - adicionar um campo a todos os documentos de uma coleção

Publicado por Fábio Berbert de Paula em 24/08/2020

[ Hits: 11.082 ]

Blog: https://fabio.automatizando.dev

 


MongoDB - adicionar um campo a todos os documentos de uma coleção



Essa dica vai para quem usa MongoDB e precisa adicionar um campo a todos os documentos de uma coleção.

Estou considerando que você já tem o MongoDB instalado e configurado e uma coleção disponível.

O primeiro passo é acessar o shell do MongoDB:

mongo

E acessar o bando de dados desejado:

use meuBanco

Vamos supor que você queira adicionar um campo "ativo" à coleção "usuarios" do banco de dados "meuBanco":

db.usuarios.update(
  {},
  {$set: {'ativo': true},
  false,
  true
)

Onde:
  • {} = critério, vazio indica todos os documentos;
  • {$set: {'ativo': true} = $set é o operador principal, que indica que estamos atualizando usando os dados existentes do documento e adicionando/atualizando o campo informado;
  • false = upsert é falso, significa que caso o registro não exista, não irá criar um novo;
  • true = multi é verdadeiro, indica que iremos atualizar todos os documentos em nosso critério ao invés de apenas um.

O título da dica indica que estamos adicionando o campo à todos os documentos da coleção, mas você pode adicionar algum critério/filtro a seu gosto no comando apresentado.

Outras dicas deste autor

Imagens flutuantes no Desktop

Como abrir uma página sem barras no Google Chrome / Chromium

VLC para Android

Comando find: expressões regulares e exclusão de diretórios

Capturando sua tela em forma de vídeo com xvidcap

Leitura recomendada

Busca Reversa no Mongo Shell

MongoDB - Erro "not authorized ... to execute command" [Resolvido]

Instalar MongoDB 4.4 no Debian 10 Buster

Backup do MongoDB diretamente para o Amazon S3 com o s3cmd

MongoDB - Habilitar autenticação por usuário (Access Control)

  

Comentários
[1] Comentário enviado por maurixnovatrento em 24/08/2020 - 23:05h


O MongoDB é um banco de dados Relacional E-R ou Orientados a Objetos (OO)?

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[2] Comentário enviado por fabio em 25/08/2020 - 06:40h



O MongoDB é um banco de dados Relacional E-R ou Orientados a Objetos (OO)?



Na verdade nenhum dos dois. É um banco de dados orientado a documentos. É o conceito de banco de dados NO-SQL.

[3] Comentário enviado por maurixnovatrento em 25/08/2020 - 12:43h


Ok entendi. Não estudei sobre esse conceito de NO-SQL. Achei bem interessante. Mas então, qual é o banco de dados OO que você recomendaria?

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[4] Comentário enviado por fabio em 25/08/2020 - 18:38h

Nunca trabalhei com banco orientado a objetos, o Postgresql parece que tem suporte a isso. O tipo de banco de dados a escolher depende muito do tipo de aplicação que você irá projetar. Hoje em dia, para a maioria dos casos, NO-SQL tem sido a melhor escolha.

[5] Comentário enviado por maurixnovatrento em 25/08/2020 - 22:32h


OK. Entendi.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[6] Comentário enviado por Destrinx em 22/07/2021 - 09:08h

OBS: JÁ CONSEGUI RESOLVER, NO "$set: {'Inativo': false}" coloquei como: "$set: {'administrativos.Inativo': false}"

Olá Fabio. Obrigado pela explicação. Achei muito lúcida.

Só fiquei com uma dúvida, que é a minha necessidade...
Nesse seu exemplo, suponhamos que eu tenha uma Collection dentro de usuarios chamada administrativos.
Como faria pra incluir esse ativo dentro dessa collection administrativos?

Tentei de algumas formas, uma delas foi assim e não funcionou:

db.getCollection('usuarios.administrativos').update(
// query
{
//"key" : "value"
},

// update
{
$set: {'Inativo': false},
$set: {'userDelete': null},
$set: {'dateDelete': null}
},

// options
{
"multi" : true, // update only one document
"upsert" : false // insert a new document, if no existing document match the query
}
);

Desde já, muito obrigado!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts