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

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

[ Hits: 10.347 ]

Blog: https://mestrefabio.com

 


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

Copiando arquivos e diretórios ocultos com rsync

Samba: Liberar compartilhamento pra somente uma máquina

Como inverter as cores de uma imagem via linha de comando

Conferência Internacional Software Livre Brasil

Emulador de Terminal "Bombado" no Vim

Leitura recomendada

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

Busca Reversa no Mongo Shell

MongoDB Community Edition 4.2 no Debian 10 Buster

  

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