Ao usar
mongoimport para importar arquivos para o MongoDB, você tem a opção de especificar um modo a ser usado. Esses modos determinam o que acontece se já houver documentos correspondentes na coleção para a qual você está tentando importar. Por padrão,
mongoimport usa insert modo, mas existem outros modos que você pode usar. O modo que você usa dependerá do que você está tentando fazer. Abaixo está uma visão geral de cada modo, juntamente com exemplos.
Os modos
Os modos de importação disponíveis em
mongoimport são como segue:| Modo | Descrição |
|---|---|
insert | Este é o modo padrão. Este modo insere os documentos do arquivo de importação. Se já existir um documento correspondente na coleção, ocorrerá um erro. Um documento correspondente é aquele que tem o mesmo ID exclusivo (como um _id correspondente field) como um documento no arquivo de importação. |
upsert | Substitui os documentos existentes no banco de dados pelos documentos correspondentes do arquivo de importação. Todos os outros documentos são inseridos. |
merge | Mescla documentos existentes que correspondem a um documento no arquivo de importação com o novo documento. Todos os outros documentos são inseridos. |
delete | Exclui documentos existentes no banco de dados que correspondem a um documento no arquivo de importação. Quaisquer documentos não correspondentes não têm efeito. |
Exemplos de como cada modo funciona estão abaixo.
Modo de inserção
Suponha que tenhamos uma coleção chamada
pets com os seguintes documentos:{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" } Acontece que eles foram importados em um arquivo chamado
pets.json . Agora imagine que temos outro arquivo JSON chamado
pets2.json , que contém os seguintes documentos JSON:{ "_id" : 1, "weight": 40 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight": 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight": 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight": 3 } Veja o que acontece se tentarmos importar isso para nossos
pets coleção ao usar (o padrão) insert modo. mongoimport --db=PetHotel --collection=pets --file=pets2.json Saída:
2021-01-03T10:07:23.421+1000 connected to: mongodb://localhost/
2021-01-03T10:07:23.422+1000 continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 1 }
2021-01-03T10:07:23.422+1000 continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 2 }
2021-01-03T10:07:23.422+1000 continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 3 }
2021-01-03T10:07:23.423+1000 1 document(s) imported successfully. 3 document(s) failed to import. De acordo com essa mensagem de erro, apenas um dos quatro documentos foi importado. Os outros três causaram um erro devido a uma chave duplicada no
_id campo. Agora vamos ver a coleção.
db.pets.find() Resultado:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 } Assim, podemos ver que o último documento foi inserido. Isso é esperado porque não tínhamos anteriormente um documento com um
_id valor de 4 . Modo Upsert
Veja o que acontece se usarmos
upsert modo para inserir o mesmo documento. mongoimport --db=PetHotel --collection=pets --mode=upsert --file=pets2.json Saída:
2021-01-03T10:19:55.400+1000 connected to: mongodb://localhost/ 2021-01-03T10:19:55.444+1000 3 document(s) imported successfully. 0 document(s) failed to import.
A saída nos informa que 3 dos 4 documentos foram importados com sucesso e que não houve falhas.
Vamos conferir a coleção.
db.pets.find() Resultado:
{ "_id" : 1, "weight" : 40 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 } Podemos ver que os três primeiros documentos foram substituídos pelos documentos do arquivo de importação. O quarto documento permanece o mesmo que era após a importação anterior.
Observe que o primeiro documento perdeu seu
name e type Campos. Isso ocorre porque o upsert O modo substitui todo o documento, e nosso documento de substituição tem apenas o weight campo (assim como o _id campo). Modo de mesclagem
Vamos modificar nosso
pets2.json arquivo para que fique assim:{ "_id" : 1, "name": "Wag", "type": "Dog" }
{ "_id" : 2, "name" : "Fetch" }
{ "_id" : 3, "name" : "Scratch" }
{ "_id" : 4, "name" : "Bubbles" }
{ "_id" : 5, "name" : "Hop", "type": "Kangaroo" } Agora vamos executar o
mongoimport comando novamente, mas desta vez em merge modo:mongoimport --db=PetHotel --collection=pets --mode=merge --file=pets2.json Saída:
2021-01-03T10:32:33.596+1000 connected to: mongodb://localhost/ 2021-01-03T10:32:33.607+1000 3 document(s) imported successfully. 0 document(s) failed to import.
De acordo com a saída, 3 documentos foram importados.
Vamos dar uma olhada na coleção.
db.pets.find() Resultado:
{ "_id" : 1, "weight" : 40, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }
{ "_id" : 5, "name" : "Hop", "type" : "Kangaroo" } Podemos ver que os documentos 1 e 2 foram atualizados e o documento 5 foi inserido. Em relação ao documento 1, o
weight campo permaneceu mesmo que o documento de importação não incluísse esse campo. Isso ocorre porque usamos merge modo. Se tivéssemos usado upsert modo (como no exemplo anterior), o weight campo teria desaparecido. Modo de exclusão
Quando você usa
delete modo, quaisquer documentos correspondentes são simplesmente excluídos. Documentos não correspondentes permanecem na coleção. Vamos ver o que acontece quando importamos o mesmo documento, mas desta vez vamos para
delete modo. mongoimport --db=PetHotel --collection=pets --mode=delete --file=pets2.json Resultado:
2021-01-03T10:39:38.925+1000 connected to: mongodb://localhost/ 2021-01-03T10:39:38.926+1000 5 document(s) deleted successfully. 0 document(s) failed to delete.
Todos os 5 documentos da coleção foram excluídos.
Alterando o(s) campo(s) Upsert
Você pode usar o
--upsertFields parâmetro para especificar um campo diferente de _id para enfrentar. Ao usar este parâmetro, passe os campos como uma lista separada por vírgulas. Não tenho certeza se você tem 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 no 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 mongoimport Comandos?
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.