Importação, exportação, insercão, operadores aritméticos, buscas básicas, operador de existência, agora vai, é hoje que você aprende

Se ainda não sabe o que é MEAN, dê uma lida:

Full-Stack JavaScript ?

Instalação

Clique aqui

Introdução ao MongoDB

O MongoDB é um banco NoSQL orientado a documentos, open source, usa javascript, e extremamente rápido, mas isso não é tudo, aliás não ache que ele é um banco que deva substituir todos seus bancos relacionais. Existe casos que o relacional seja a melhor opção ou até outro banco NoSQL. BLAH!

Então quando você usaria victor ? O__0

  1. Um sistema onde eu teria uma massa imensa de dados(Gigantesca).
  2. Onde os dados crescerá muito e precisaria dividi-los.
  3. Caso eu queira que os dados sejam baseados por localização.
  4. Não queira um DBA para meu projeto.
  5. Qualquer aplicação real time como chats e rede sociais.

Usuaria o noSQL em qualquer caso em que o relacional não daria conta, ou que ficasse com gambiarras. O MongoDB dependendo do que eu queira seria minha opção, ou senão outro banco noSQL.

Pra ficar melhor seu entendimento, leia: Devo usar NoSQL e MongoDB?

Get’s get started

Vamos começar a brincadeira inicializando o mongoDB no seu terminal (levantando)

> mongod

Depois de inicializar, para que você abra o client de desenvolvimento do mongoDB use apenas o comando:

> mongo

Comandos básicos

Os exemplos foram feitos de acordo com o meu database, caso a sua esteja vazia, você pode baixar esse arquivo JSON.

Importar os dados de um JSON:

> mongoimport --db database --collection
  collection --drop --file data.json

Caso não exista o banco ou a collection, ele irá criar um novo, como por exemplo:

> mongoimport --db be-mean --collection clientes
  --drop --file clientes.json

Exportar arquivos de uma coleção para um arquivo JSON:

> mongoexport --db nomedodatabase --collection nomedacolecao
  --out minha_colecao.json

Selecionando o banco para usá-lo

> use nomedobanco

Caso ele não exista, o mongo vai criar a database. Se quiser levantar o client em uma database já selecionada para usar:

> mongo be-mean-instagram

Agora se eu usar o comando:

> db

Ele me retornará o nome do banco que está em uso. Mas e se eu quiser listar todos os bancos que eu tenho ?

> show dbs

Fácil não é ?

No mongoDB não temos tabelas, no noSQL, elas tem o nome de collections, e para listar as collections que tenho no banco é:

> show collections

Inserção

Para fazer uma inserção vamos usar um exemplo de um banco já criado, e lembre-se, use o comando para usá-lo e em seguida uma inserção para ele alocar um espaço do banco.

Inserindo na collection teste, como vai ser a primeira vez, ele irá criar.

> db.teste.insert({nome: "Victor", idade:18})

Agora sim ele alocou no hd, pois teve uma inserção de dados e quando usarmos o comando para listar os bancos ele irá aparecer.

Ora, podemos melhorar essa inserção, já que estamos no client, podemos usar variáveis e deixar essa inserção mais organizada não é ? Muitas vezes inserimos muitos dados e acaba ficando difícil.

> var json = {escola: "Webschool", active: true}
> b.teste.insert(json)

Agora queremos listar todos os conteúdos da collection, para saber se realmente inseriu todos os dados.

> db.pokemons.find()

OPA! Escrevi errado, e agora ? Posso modificar ? =(

Claro!

> var query = {name: 'Carterpie'}
> var p = db.pokemons.find(query)
> p

Ele irá mostrar o resto das informações, porém ele vem como cursor, nao tem como modificar usando “p.name = ‘RatoCabeludo’ “

Pra resolver, usaremos o findOne.

> var p = db.pokemons.findOne(query)
> p.name = 'RatoCabeludo'

Ele mudará(Caso o campo name não exista, ele criará um novo com o valor setado) CUIDADO! VAI ESTAR SALVO LOCALMENTE! Precisamos salvar, e para isso usaremos o save.

> db.pokemons.save(p)

Repare que aparece esse resultado:

WriteResult({
  "nMatched": 1,
  "nUpserted": 0,
  "nModified": 1
})
//Significa respectivamente:
nMatched  - Encontrado
nUpserted - Inseriu
nModified - Modificado

Então se fizer um

> db.pokemons.find()

ele estará lá, porém esse caminho foi muito longo não acha ? =( Tivemos que encontrar o objeto depois modificar e usar o save. Porém lá pra frente veremos o comando update que faz isso de uma vez. =)

Buscas básicas

> db.colecao.find({clasura}, {campos})

Onde clasuras seria nosso where no banco relacional e o campos seria o nosso select.

No objeto de campos apenas precisamos dizer quais campos podem ser retornados 1 - diz qual o campo quer retornar(true) 0 - nega o campo nessa busca(false)

exemplo:

> var query= {name:'Persian'}
> var field= {name: 1, description: 1}
> db.pokemons.find(query, field)

Resultado:

{
  "_id": ObjectId("564da193ab81d6513c255cb1"),
  "name": "Persian",
  "description": "Sabe voltar pra sua casa."
}

Veja que ele também retorna o _id, para tira-lo é só usar o 0 para negar.

> var field= {name: 1, description: 1, _id: 0}
> db.pokemons.find(query, field)

Resultado:

{
  "name": "Persian",
  "description": "Sabe voltar pra sua casa."
}

Operadores Aritméticos

É bastante fácil. (⌒‿⌒)

<  é $lt
  less than
<= é $lte
  less than or equal
>  é $gt
        greater
>= é $gte
  greater or equal

Exemplo:

> var query = {height: {$lt: 1}}
> db.pokemons.find(query)

Resultado:

{
  "_id": ObjectId("564da193ab81d6513c255caa"),
  "name": "Raichu",
  "description": "if the electrical...",
  "type": "electric",
  "attack": 50,
  "defence": 30,
  "height": 0.8
},
{
  "_id": ObjectId("564da193ab81d6513c255cab"),
  "name": "Psyduck",
  "description": "Psyduck uses a mysterious power.",
  "type": "Water",
  "attack": 30,
  "defence": 20,
  "height": 0.8
}

Operadores lógicos

OU é $or

Exemplo:

> query = {$or:[{name:'Metapod'},{height: 0.7}]}
> db.pokemons.find(query)

Resultado:

{
  "_id": ObjectId("564da193ab81d6513c255cae"),
  "name": "Metapod",
  "description": "The shell covering this Pokémons.",
  "type": "Bug",
  "attack": 10,
  "defence": 30,
  "height": 0.7
}

$nor (not or) - Todos os outros registros que não vieram na busca do nosso $or

> query = {$nor:[{name:'Metapod'},{height: 0.7}]}

$and

> query = {$and:[{name:'Metapod'},{height: 0.7}]}
> db.pokemons.find(query)

Resultado:

{
  "_id": ObjectId("564da193ab81d6513c255cae"),
  "name": "Metapod",
  "description": "The shell covering this Pokémons.",
  "type": "Bug",
  "attack": 10,
  "defence": 30,
  "height": 0.7
}

Operadores existenciais

$exist

> db.colleciton.find({campo:{$exist:true}})

Para quê ?

Se vc ja fez blog, já deve ter visto em tags clounds, aquelas tag mais usadas. Imagina vc querer montar essa possibilidade, vc tem que pesquisar todos os posts que possuem tags, então ae criar todo o mecanismo, não adianta vc querer dar um select em tudo e depois filtrar, pq não filtrar direto ?

Concluindo

Com esses poucos comandos já dá pra brincar um pouco =) lindo ele não é !?