Começando com MongoDB

Imagem para Começando com MongoDB

DatabasePostado em  6 min de leitura

O MongoDB é um tipo de banco de dados orientado a documentos, em vez de registros estritamente definidos e relacionamentos. Esse tipo de banco de dados foi apelidado de NoSQL(Not Only SQL). Um documento no MongoDb, agrupa objetos em coleções. Você pode pensar em uma coleção como uma tabela como você criaria em um banco relacional, mas a diferença é que não será forçado a definir um esquema para que possa armazenar alguma coisa.

Você pode incorporar um documento dentro de outro, o que é muito útil para os casos em que há uma relação de um para um. Em um típico banco de dados relacional, você precisa criar duas tabelas e ligá-los em conjunto com uma chave estrangeira para conseguir o mesmo resultado. NoSQL não suporta joins, mas se você organizar os dados corretamente, então você vai achar que você não precisa de um join.

Vale a pena mencionar o objetivo do MongoDB e do NoSQL não é acabar com o banco relacional. Bancos relacionais ainda são uma solução muito boa para a maioria das necessidades do mundo do desenvolvimento. Mas eles tem os seus pontos fracos, mais notadamente a necessidade de definir um esquema rígido para os seus dados, que o NoSQL tenta resolver.

O MongoDB tem como característica ser open source, possuir alta performance, não possuir esquemas, ser escrito em C++, multiplataforma e ser formado por um conjunto de aplicativos JSON. O mesmo foi concluído em 2009 lançando assim a primeira versão do MongoDB.

Comparação dos conceitos em SQL e MongoDB:

SQL MongoDB
Banco de dados (database) Banco de dados (database)
Tabela (table) Coleção (colection)
Linha (row) documento ou documento BSON
Coluna (column) Campo (field)
índice (index) índice (index)
Table joins documentos embutidos e linkados
Chave Primária (primary key) Chave Primária (primary key)

Instalação

Para instalar o MongoDB precisamos fazer o download no site oficial.

Para mais detalhes sobre a instalação para as plaaformas, você pode ver nos links abaixo:

É necessário que esteja adicionado o caminho da pasta bin do mesmo no Path do sistema. Se não já estiver adicionado, pode fazê-lo pela interface do sistema operacional ou pelo comando:

# ex: C:\Program Files\MongoDB\Server\3.2\bin no windows
export PATH="$PATH:[caminho onde foi instalado]/bin"

Com isso, podemos usar o comando mongod de qualquer lugar. O mesmo é usado para iniciar o servidor do MongoDB. Por default o MongoDB armazena seus bancos de dados no diretório /data/db (Linux e OS X) e C:\data\db (Windows). No Windows, C: é a unidade onde está executando o comando, se estiver por exemplo usando uma outra unidade como E:, a pasta deverá estar na mesma. Portanto, se iniciar o servidor do MongoDB e não tiver essa pasta, terá um erro no terminal.

Se você quiser usar outra pasta, basta usar a flag dbpath, ao inciar o servidor:

# ex: mongod -dbpath=/home/tecnologia/mongodb
mongod -dbpath=[caminho da pasta]

Utilização

Além de iniciar o servidor como o comando mongod, também temos o comando mongo, para termos acesso ao shell. Ao iniciar o servidor, por padrão o mongo procura por uma base de dados na porta 27107, no seu localhost.

Ao iniciar o shell, por padrão ele utilizará o banco test:

$ mongo
MongoDB shell version: 3.2.4
connecting to: test

Para selecionar ou criar uma base de dados, basta usar o comando use [nome_da_base]. Sempre que precisar checar em qual base está trabalhando, basta usar o comando db. Já para checar quais são as bases existentes, utilize o comando show dbs ou show databases.

Inserindo

Para que a base seja criada com o comando use, é necessário utilizar o comando INSERT:

use myTest
#switched to db myTest
user = { name : 'Hemerson Vianna', description: 'Testando' }
db.users.insert(user)
#WriteResult({ "nInserted" : 1 })

O mesmo também pode ser feito com o comando SAVE:

use myTest
#switched to db myTest
user = { name : 'Hemerson Vianna', description: 'Testando' }
db.users.save(user)
#WriteResult({ "nInserted" : 1 })

Usamos o objeto db, que aponta para o banco de dados atualmente selecionado. Incluindo o documento user dentro da coleção users

A diferença entre insert e save.

O comando insert apenas insere um documento. O comando save insere um documento, mas se o registro já tiver um _id, o comando faz a função de atualização.

Consultando

Podemos consultar o que foi inserido com o comando find e podemos usar um filtro com o mesmo.

# O mesmo que SELECT * FROM list
db.list.find()
# { "_id" : ObjectId("571f6bdd891bf653d4cc709d"), "name" : "Hemerson Vianna", "description" : "Testando" }

# Com filtro
# O mesmo que SELECT * FROM list WHERE name="Hemerson Vianna"
db.list.find({"name": "Hemerson Vianna"})
# { "_id" : ObjectId("571f6bdd891bf653d4cc709d"), "name" : "Hemerson Vianna", "description" : "Testando" }

# Especificando os campos
# O campo _id vem por padrão
# O mesmo que SELECT _id, name FROM list
db.list.find({},{"name": 1})

# Removendo o campo _id
# O mesmo que SELECT name FROM list
db.list.find({},{"name": 1, "_id": 0})

Acrescentando o método pretty(), podemos exibir os resultados de um modo mais apresentável.

db.list.find().pretty()

Além do método find() há também o método findOne(), que retorna apenas o primeiro resultado da consulta.

db.list.findOne({"description": "Testando"})

Operadores de comparação:

  • equal - $eq é o mesmo que ==
  • greather - $gt é o mesmo que >
  • greather than equal - $gte é o mesmo que >=
  • less than - $lt é o mesmo que <
  • less than equal - $lte é o mesmo que <=
  • not equal - $ne é o mesmo que !=
  • in - $in é o mesmo que IN()
  • not in - $nin é o mesmo que NOT IN()

Operadores lógicos:

  • or - $or é o mesmo que OR
  • and - $and é o mesmo que AND
  • not - $not é o mesmo que NOT
  • nor - $nor é o mesmo que NOR

Exemplos:

db.users.find({"age":{"gte":29, "lte":31}});

db.users.find({"name":{"ne":"Hemerson Vianna"}});

Atualizando

Você pode usar os métodos update() e save() para atualizar documentos dentro da coleção. Sendo que, o método update() atualiza valores em um documento existente, enquanto o método save() substitui o documento existente em si pelo documento passado dentro do método save().

# Update
db.list.update({name: "Hemerson Vianna"}, {$set: {description: "Testando 2"}})

Se não utilizar o $set todos os dados do usuário como, nome e descrição, serão substituidos pela descrição "Testando 2", ou seja, o $set faz com que seja mantido todos os dados, e alterado apenas a descrição.

# save
db.list.save({"_id" : ObjectId("571f6bdd891bf653d4cc709d"), description: "Testando 2"}})

Removendo

O método remove() é usado para remover um documento da coleção. Este método permite 2 parâmetros. O primeiro é o critério de exclusão e o segundo é a flag justOne. Se a flag estiver setada como true ou 1, o método removerá apenas um documento.

# Remove o registro com o valor informado
db.list.remove({name: "Hemerson Vianna"})

# Remove todos os dados da coleção list
db.list.remove()

Mais alguns comandos

  • show collections - mostra as coleções do banco
  • db.createCollection("[nome da coleção]") - cria uma coleção
  • db.[coleção].drop() - deleta a coleção
  • db.dropDatabase() - deleta o banco atual

Conclusão

Querendo conhecer mais sobre um banco NoSQL, o MongoDB é uma das melhores opções. Nos próximos artigos, entraremos mais no assunto.