Quando você usa
mongoimport
para importar arquivos para o MongoDB, você tem a opção de substituir os documentos existentes que correspondem aos que você está importando. Com isso quero dizer, 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á substituído pelo que está sendo importado. Você também pode especificar outro campo (além de
_id
campo) para ser o campo correspondente, se necessário. A maneira de substituir documentos existentes ao usar
mongoimport
é usar upsert
modo. 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" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
E temos o seguinte arquivo JSON chamado
pets.json
:{"_id":2,"name":"Fetch","type":"Dog"} {"_id":3,"name":"Scratch","type":"Cat","weight":10} {"_id":4,"name":"Hop","type":"Kangaroo","weight":60}
O comando a seguir importa o arquivo JSON para a coleção:
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=data/pets.json
Isso usa
upsert
modo para substituir os documentos correspondentes pelos importados. Verifique os resultados
Vamos dar uma olhada na coleção agora.
db.pets.find()
Resultado:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog" } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
Podemos ver que o documento 2 foi completamente substituído. O cachorro
Bark
foi substituído pelo cão Fetch
, e nenhum peso é registrado para Fetch
. O documento 3 também foi substituído, e o documento 4 é um documento completamente novo.
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 este parâmetro, passe os campos como uma lista separada por vírgulas. Suponha que tenhamos outro arquivo JSON chamado
pets2.json
que queremos importar, e fica assim:{"name":"Fetch","type":"Dog","weight":20,"gooddog":true} {"name":"Scratch","type":"Cat","weight":15} {"name":"Bubbles","type":"Fish"}
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=upsert --upsertFields=name,type --file=data/pets2.json
Agora vamos verificar a coleção novamente:
db.pets.find()
Resultado:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 20, "gooddog" : true } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 15 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 } { "_id" : ObjectId("5ff00800d99141016941217c"), "name" : "Bubbles", "type" : "Fish" }
Podemos ver que o Fetch foi atualizado/substituído (mas o
_id
o valor permanece o mesmo). O mesmo com o Scratch. Bubbles, por outro lado, não teve correspondência com os campos upsert e, portanto, foi inserido.
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 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 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.