sexta-feira, 18 de dezembro de 2015

MongoDB – Importação/Exportação e Insert/Save




Antes de aprendermos a fazer pesquisas no MongoDB, primeiramente iremos aprender os comando de exportação e importação para que você já possa importar alguns dados e comece a brincar com eles durante as consultas.

Exportação
Na exportação os dados da collection são salvos em um arquivo JSON.
mongoexport --db nome_do_database --collection nome_da_collection --out arquivo.json

Importação
Os dados salvos em um JSON são importados para uma collection do Mongo.
mongoimport --db nome_do_database --collection nome_da_collection --drop --file arquivo.json
Nesse comando o --drop apaga a collection do database que você selecionou caso ela exista, para que possa começar do zero.

Observação: Os comandos de importação e exportação devem ser feitos no terminal normalmente e com o servidor mongo ligado. A importação e exportação não é feita no cliente mongo como você pode estar pensando...

No GitHub tem alguns JSON que você importar e usa para testar os comandos.

Nesse post iremos aprender sobre as formas de inserirmos dados no Mongo.

Vamos lá!

No Mongo existem duas formas de inserirmos os dados, são elas
db.collection.insert(documento)
ou
db.collection.save(documento)

Primeiro iremos criar em uma variável com os dados da pessoa que iremos inserir na collection pessoa da database agenda que foi mostrado no post anterior. Para criarmos essa variável e inserir os dados nela, podemos usar comandos JavaScript já que o Mongo aceita isso, um exemplo é que se você fizer 2 + 2 no terminal do Mongo, ele executa e te da o resultado. Veja como é simples criar uma variável para inserirmos no na nossa collection:

var pessoa = {
... 'name': 'Barry Allen',
... 'phones': [{'carrier': 'Claro', 'number': 912345678}]
... }

Phones será uma array onde poderemos colocar mais de um número, caso a pessoa possua, por isso os [ ] (colchetes). E dentro desses colchetes podemos colocar vários objetos, cada objeto dentro de { } (chaves), lembrando que um objeto pode possui vários atributos. Como no exemplo mostrado os nosso objeto possui os atributos carrier e number. Agora outro exemplo onde phones possui dos objetos:

var people = {
    "name": "Hal Jordan",
    "phones": [
        {
            "carrier": "Claro",
            "number": 987654321
        },
        {
            "carrier": "Tim",
            "number": 956781234
        }
    ]
}

Fácil, né!?

Temos dois contatos como exemplo. Vamos inserir usando o insert.
Primeiro:
db.pessoa.insert(pessoa)
depois:
db.pessoa.insert(people)

Para cada inserção deverá aparecer algo semelhante a isso (estou usando o MongoHack)...

Inserted 1 record(s) in 3ms
WriteResult({
"nInserted": 1
})

Essa mensagem mostra o tempo levado para fazer a inserção e diz quantos documentos foram inseridos.

Agora o save. Pode ser estranho ter dois comandos para inserir objetos no nosso banco, mas existe uma diferença entre eles, para poderemos ver essa diferença precisaremos usar o comando findOne(). Os comando de pesquisa explicarei mais a fundo no próximo post e a diferença do save você verá na prática.

Continuando…

Vamos criar uma variável que será nossa query, essa variável irá conter o que queremos pesquisar no banco de dados. Iremos pesquisar o nome 'Barry Allen', para isso nossa variável precisara ter o atributo que irá verificar (no caso o name) e o nome. Vejá como fica…

var query = {'name': 'Barry Allen'}

Agora iremos usar uma outra variável para receber o valor da pesquisa para a nossa query…

var auxiliar = db.pessoa.findOne(query)

Um spoiler do próximo post: db.collection.find() ou db.collection.find({}) exibi todos os dados da collection, lembre se que no nosso caso a nossa coleção é pessoa.

A variável auxiliar irá receber de findOne() o resultado da busca para o nome Barry Allen… Se depois desse comando, você digitar auxiliar e der ENTER, você verá isso…

{
    "_id": ObjectId("567479879a3b551315ed44c8"),
    "name": "Barry Allen",
    "phones": [
        {
            "carrier": "Claro",
            "number": 912345678
        }
    ]
}

Fácil, fácil. Reparou no atributo “_id”? Ao inserirmos um objeto no banco, automaticamente é criado um identificador desse objeto, é a forma de diferenciarmos cada objeto. Podemos até ter dois objetos com os mesmo dados, mas ele serão diferentes, pois possuirão id's diferentes.

Agora iremos alternar nossa variável auxiliar, adicionando um atributo, o nickname (apelido) que receberá The Flash.

auxiliar.nickname = 'The Flash'

Você pode executar auxiliar, para ver como ficou com a modificação. Veja que essa modificação foi feita apenas na variável, para que seja inserida no banco de dados e atualizar o contato que tem o nome do Barry Allen, usaremos o save…

db.pessoa.save(auxiliar)

Você pode utilizar o comando…

db.pessoa.find()

Para ver todas as pessoas que inserimos, no caso, você poderá ver que o objeto com nome de Barry Allen possui um atributo a mais. Isso graças ao nosso save. Ai já deu para perceber a diferença né!?

E se fizesse isso com o insert? Iria da erro. Pois o save verifica se existe algum objeto com o mesmo id, caso tenha ele apenas altera, caso não tenha ela insere. Já o insert se você tentar fazer o mesmo processo trocando o save pelo insert, irá da erro, o Mongo vai dizer que já existe um objeto com o mesmo _id.

E é isso.

Agora você já sabe inserir e ver os dados. Até o próximo post ;)

0 comentários:

Postar um comentário