Data

29 mar, 2012

Como usar o console do MongoDB

Publicidade

Criei esse artigo a partir da segunda aula que dei sobre MongoDB na faculdade e achei interessante repartir esse conhecimento com o resto do público.

Antes de iniciarmos, precisamos iniciar uma instância do servidor do MongoDB. Para o Windows é só você seguir a tela abaixo; para o linux: sudo mongodb start


Inicialmente usaremos o comando para setar qual database usaremos, caso ela não existe será criada.

use faculdade

Caso você já possua uma database criada e não lembre o nome, pode usar o comando:

show dbs

E para ver os nomes das collections, após escolher qual database quer, com o comando use, pode usar o comando:

show collections
//igual a db.getCollectionNames()

Após o primeiro passo, já poderemos inserir dados na nossa database faculdade e em qual collection eu desejar, lembrando que collection tem uma função parecida com as tabelas dos bancos relacionais.

db.collection.insert(json);

No nosso exemplo para a collection professores ficará:

db.professores.insert({nome: ‘Jean’, idade:26, disciplinas:[‘Tecnicas de Programacao’, ‘Topicos Avancados’], sexo: ‘m’})


No exemplo acima, após a inserção de 3 professores, eu os listo todos com o comando:

db.professores.find()

Então nosso comando find() nos retornará a lista de todos os registros. Se eu quiser passar alguma cláusula para a busca, posso fazer da seguinte forma:

db.professores.find({nome: ‘Jean’})
//db.professores.find({nome: ‘Jean’, idade:26})

Lembrando que se nossa consulta for falsa, ele não escreverá nenhum resultado, como podemos ver na tela abaixo:


Beleza, então já consigo buscar algum registro com um valor exato. Porém, para fazermos comparações entre valores, usaremos uma sintaxe um pouco diferente. Vamos ter como exemplo a busca por professores com idade acima de 30 anos.

db.professores.find({idade: {$gt:30}})

Como podemos notar com o exemplo, utilizamos um operador condicional o $gt que significa great than, ou maior que, em português.

Também podemos usar os seguintes operadores condicionais: $gte, $lt, $lte, $all, $in, $nin, $ne, $exists, $mod

Ou seja podemos ver que na função find() podemos passar 1 paramêtro que vai fazer a comparacao de valores para delimitar a busca. Tendo em vista que se utilizarmos operadores de comparação como >, >=, <, <= e outros, teremos que usar a seguinte regra:

db.collection.find({campo: {$operador: valor}})


Como eu disse anteriormente, podemos passar um paramêtro para a comparação de valores, mas também posso passar outro parâmetro, informando quais campos eu quero que retornem na busca; neste caso, nosso exemplo ficará:

db.collection.find({campo: {$operador: valor}}, {campo1: 1, campo2: 1, campoN: 1})

Como visto no exemplo acima ele sempre retorna o _id de cada registro, para que isto não ocorra podemos repassar no paramêtro dos campos _id:0

Porém, caso eu não queira comparar nenhum valor, terei que passar null no primeiro paramêtro, podendo ficar da seguinte maneira:

db.collection.find(null, {campo1: 1, campo2: 1, campoN: 1})


Uma outra função bem útil é a ordenação da busca, que se assemelha ao ORDER BY do SQL. No MongoDB temos a função sort() que recebe um paramêtro para ordernar.

db.collection.find(null, {nome:1, idade:1, _id:0}).sort({idade:1})

Onde passaremos o 1 paras ASC ou seja, do menor para o maior, ou -1 que é o DESC, do maior para menor.

Além de ordenar, também podemos limitar a busca, parecido com o LIMIT do SQL, passando um valor inteiro para a função limit().

db.collection.find(null, {nome:1}).sort({idade:1, nome:-1}).limit(2)

Outra função que auxilia ao limit() é a skip(), que receberá um valor inteiro para pular até aquele registro. Até agora, nossas funções convertidas em SQL ficam assim:

select nome, idade from professores ORDER BY idade ASC LIMIT1,2

Bom, já aprendemos como inserir dados e listá-los esta na hora de modificarmos os registros. Para isto, utilizamos a função update({busca}, {atualizacao}).

 
Assim como temos o modificador $set, também temos o $unset, que elimina a chave.

db.professores.update({nome: ‘Jean’}, {$unset: {disicplinas: 1}})

Também podemos apenas incrementar ou decrementar um valor inteiro utilizando o modificador $inc

db.professores.update({nome: ‘Jean’}, {$inc: {idade: 5}}) 
//incrementa em 5 a idade do professor Jean
db.professores.update({nome: ‘Jean’}, {$inc: {idade: -5}})
//incrementa em 5 a idade do professor Jean

Agora para removermos documentos, utilizamos a função remove(json). Onde passamos como parâmetro a clausula de comparação.

Porém, caso queiramos limpar toda a collection, é mais rapido usando drop()


Com essas funções já conseguimos manipular o banco de uma forma básica, entretanto, o MongoDB nos provém inúmeros outros recursos que veremos nos próximos artigos. Até lá.