MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como excluir documentos do MongoDB importando um arquivo


A partir de mongoimport versão 100.0.0, você pode excluir documentos no MongoDB com base em um arquivo importado. Para fazer isso, use delete modo.

Quando você usa delete modo, se um documento importado tiver o mesmo _id valor como um existente na coleção para a qual você está importando, o documento existente será excluído.

Você também pode especificar outro campo ou campos (além de _id campo) para ser o campo correspondente, se necessário.

Exemplo


Suponha que tenhamos uma coleção chamada pets que contenham os seguintes documentos:
db.pets.find() 

Resultado:
{ "_id" :1, "name" :"Wag", "type" :"Dog", "weight" :20 }{ "_id" :2, "name" :"Latido", "tipo" :"Dog", "weight" :10 }{ "_id" :3, "name" :"Miau", "type" :"Cat", "weight" :7 }{ "_id" :4, "name" :"Scratch", "type" :"Cat", "weight" :8 }{ "_id" :5, "name" :"Bruce", "type" :"Bat", "weight" :3 } 
E temos o seguinte arquivo JSON chamado pets.json :
{"_id":1,"name":"Wag","type":"Cachorro"}{"_id":2,"name":"Fofo","type":"Gato"," peso":10}{"_id":9,"name":"Salto","type":"Canguru","peso":60}

O comando a seguir importa o arquivo JSON usando delete modo:
mongoimport --db=PetHotel --collection=pets --mode=delete --file=data/pets.json 

A execução desse comando exclui quaisquer documentos correspondentes na coleção.

Verifique os resultados


Vamos dar uma olhada na coleção agora.
db.pets.find() 

Resultado:
{ "_id" :3, "name" :"Miau", "type" :"Cat", "weight" :7 }{ "_id" :4, "name" :"Scratch", "type" :"Cat", "weight" :8 }{ "_id" :5, "name" :"Bruce", "type" :"Bat", "weight" :3 }

Podemos ver que os 2 primeiros documentos foram excluídos. Eles foram excluídos porque seu _id os valores corresponderam ao _id valores nos documentos existentes. Isso ocorre apesar de outros detalhes não necessariamente corresponderem (como no documento 2).

Além disso, nosso arquivo importado tinha um documento com um _id de 9, mas não havia documento correspondente e, portanto, nada foi excluído para esse.

Alterar o(s) campo(s) Upsert


Você pode usar o --upsertFields parâmetro para especificar um campo diferente de _id para o qual jogar contra. Ao usar vários campos com este parâmetro, passe-os como uma lista separada por vírgulas.

Suponha que tenhamos outro arquivo JSON chamado pets2.json e fica assim:
{ "name" :"Miau", "type" :"Cat", "weight" :7 }{ "name" :"Bubbles", "type" :"Fish", "weight" :3 } 
Este documento não inclui o _id campo, então precisaríamos comparar com outros campos que identificam exclusivamente cada documento. Neste caso, poderíamos usar o name e type Campos.

Podemos, portanto, usar o seguinte mongoimport comando:
mongoimport --db=PetHotel --collection=pets --mode=delete --upsertFields=name,type --file=data/pets2.json 

Agora vamos verificar a coleção novamente:
db.pets.find() 

Resultado:
{ "_id" :4, "name" :"Scratch", "type" :"Cat", "weight" :8 }{ "_id" :5, "name" :"Bruce", "type" :"Bat", "peso" :3 }

Miau, o gato foi excluído porque esse animal de estimação existia tanto na coleção do MongoDB quanto no documento importado.

Bubbles, o peixe, não tinha documento correspondente e, portanto, nada foi excluído para aquele.

Verifique se há mongoimport


mongoimport faz parte do pacote MongoDB Database Tools. As ferramentas de banco de dados do MongoDB são um conjunto de utilitários de linha de comando para trabalhar com o MongoDB.

Se você não tem certeza se possui o MongoDB Database Tools/mongoimport instalado, tente executar o seguinte comando em seu Terminal ou Prompt de Comando para verificar:
mongoimport --version 

Se você o tiver, deverá ver as informações da versão, etc. Se não o tiver, poderá usar as instruções de instalação no site do MongoDB para instalá-lo em seu sistema.

Onde executar os comandos?


Não se esqueça, você precisa executar mongoimport comandos da linha de comando do seu sistema (por exemplo, um novo Terminal ou janela de prompt de comando).

Não os execute a partir do mongo Concha.