Error Tracking

Este post é mantido quase como uma wiki para prover em MongoDB dicas rápidas, muito para meu próprio uso de pequenos problemas que tenho de resolver no dia a dia com a gestão de dos bancos de dados NoSql dos projetos que estou envolvido.

MongoDB dicas rápidas



Alterar / renomear um campo de um documento em coleções

Em alguns períodos os projetos alteram as estruturas dos dados persistidos, e alguns campos acabam por se tornar obsoletos ou necessitam de atualização de nomenclatura nas coleções.

Para isso, é necessário utilizar o operador $rename no comando update:

db.collection.update( {} , { $rename : { ‘old_name’ : ‘new_name’ }}, true, true);
  • {} – O conjunto vazio é porque queremos todos os registros;
  • $rename – O modificador para o comando de atualização que neste caso: substituiu “user_name” por “name”;
  • false – Permitir upserts caso o registro não exista;
  • true – multi option: Significa aplicar comando para todos os registros, já que por padrão o update() atualiza apenas o primeiro registro.

Referências:

  1. MongoDB – $rename
  2. MongoDB – como renomear campos

Excluir / remover um campo de um documento

Em alguns períodos os projetos alteram as estruturas dos dados persistidos, e alguns campos acabam por se tornar obsoletos e podem ou devem ser removidos dos documentos nas coleções.

Para isso, é necessário utilizar o operador $unset no comando update:

db.collection.update({},{$unset: {field:1}},{multi: true});

Executando esta operação, o primeiro registro da coleção terá o campo field excluído, isto é, o campo não existirá mais neste documento.

Para remover um campo de todos os documentos da coleção, utilize multi: true:

db.collection.update({},{$unset: {field:1}});

Referências:

  1. MongoDB – How to remove a field from document
  2. MongoDB – $unset

Registros duplicados

Para encontrar registros / documentos duplicados na base, por algum campo específico, utilize a query de agregação a seguir:

db.collection.aggregate([
  { $group: {
    _id: { name: "$name" },   // replace `name` here twice
    duplicados: { $addToSet: "$_id" },
    count: { $sum: 1 } 
  } }, 
  { $match: { 
    count: { $gte: 2 } 
  } },
  { $sort : { count : -1} },
  { $limit : 10 }
]);

Referências:

  1. Find all duplicate documents in a MongoDB collection by a key field

Pin It on Pinterest

Share This

Share This

Share this post with your friends!