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

Como mesclar documentos ao importar um arquivo para o MongoDB


Quando você usa mongoimport para importar arquivos para o MongoDB, você tem a opção de mesclar documentos existentes com os que está importando.

Nesse caso, 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á mesclado com o que está sendo importado.

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

Ao mesclar documentos, o documento resultante combinará os dados existentes com quaisquer novos dados que estejam no arquivo importado. Quaisquer dados iguais permanecerão os mesmos. Quaisquer dados conflitantes resultarão na substituição dos dados do arquivo importado pelos dados existentes. Se um documento importado não contiver um campo que esteja no documento correspondente na coleção do MongoDB, esse campo permanecerá inalterado na coleção (ou seja, não será removido ou alterado).

A maneira de mesclar documentos com mongoimport é usar merge modo.

Exemplo


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

Resultado:
{ "_id" :1, "name" :"Wag", "type" :"Cachorro" }{ "_id" :2, "name" :"Latido", "type" :"Cachorro" }{ "_id" :3, "name" :"Miau", "type" :"Gato" }

E temos o seguinte arquivo JSON chamado pets.json :
{"_id":2.0,"name":"Buscar","type":"Cão","weight":40.0}{"_id":3.0,"weight":10.0}{"_id":4.0,"name":"Salto","type":"Canguru","peso":60.0}

O comando a seguir importa o arquivo JSON para a coleção:
mongoimport --db=PetHotel --collection=pets --mode=merge --file=data/pets.json 

Isso usa merge modo para mesclar documentos correspondentes com os importados.

Verifique os resultados


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

Resultado:
{ "_id" :1, "name" :"Wag", "type" :"Cachorro" }{ "_id" :2, "name" :"Buscar", "type" :"Cachorro", " weight" :40 }{ "_id" :3, "name" :"Miau", "type" :"Cat", "weight" :10 }{ "_id" :4, "name" :"Hop", " type" :"Canguru", "peso" :60 }

Podemos ver que o documento 1 está inalterado, o documento 2 teve seu campo de nome alterado para Fetch , e também teve um weight campo adicionado.. O documento 3 também teve um campo de peso adicionado e o documento 4 foi inserido.

Alterar 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.

Suponha que tenhamos outro arquivo JSON chamado pets2.json que queremos importar, e fica assim:
{"name":"Wag","type":"Cachorro","weight":20.0,"gooddog":true}{"name":"Bolhas","type":"Peixe"} 
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=merge --upsertFields=name,type --file=data/pets2.json 

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

Resultado:
{ "_id" :1, "name" :"Wag", "type" :"Dog", "gooddog" :true, "weight" :20 }{ "_id" :2, "name" :" Fetch", "type" :"Dog", "weight" :40 }{ "_id" :3, "name" :"Miau", "type" :"Cat", "weight" :10 }{ "_id" :4, "name" :"Hop", "type" :"Canguru", "weight" :60 }{ "_id" :ObjectId("5ff0548dd991410169412300"), "name" :"Bolhas", "type" :" Peixe" }

Podemos ver que o Wag foi atualizado (mas o _id o valor permanece o mesmo).

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.