dom
fev 21st

Manipulando dados pelo shell do MongoDB ...

Assim como o MySql o MongoDB tem um shell para manipular dados diretamente na base, seguem os comandos (CRUD) básicos para inserir, buscar, atualizar e apagar documentos.

Para inicializar o shell:

/opt/mongo/bin/./mongo

Se tiver algum problema com este comando então faça isto:

cd /opt/mongo/bin/
./mongo

As linhas abaixo serão exibidas:

MongoDB shell version: 1.3.3-
url: test
connecting to: test
type "help" for help
>

Os comandos iniciais são:

show dbs Mostra todas as bases de dados
use dbname Aponta a váriavel “db” para a base digite no lugar de dbname
show collections Exibi as coleções da base em uso. As collections “equivalem” as tables nos bancos relacionais.
db.collection_name.insert(object) Cria um documento
db.collection_name.find() Exibi os documentos da coleção
db.collection_name.update(criteria_object_or_pair_key_value) Atualiza um documento com o critério ou chave par/valor definido
db.collection_name.remove(criteria_object_or_pair_key_value) Remove um ou mais documentos com o critério ou chave par/valor definido

Vamos à prática para exemplificar os comandos acima. Abaixo estamos verificando as bases existentes, definindo que usaremos a base “local”, confirmando que estamos na base correta e mostrando as coleções que neste caso ainda não existem.

> show dbs
admin
local
>use local
switched to db local
> db
local
>show collections
false

Agora vamos criar uma coleção de documentos chamada “minha_colecao” e inserir alguns dados.

>db.minha_colecao.insert({ nome: "Mauricio", fone: "12345678",  idade: 10 })
ObjectId("4b808e9a6eff")

Quando exibimos as coleções novamente temos “minha_colecao” e “system.indexes” sendo a última criada automaticamente.

>show collections
minha_colecao
system.indexes

Podemos verificar nossos documentos criados e inserir outros.

>db.minha_colecao.find()
{ "_id" : ObjectId("4b808e9a6eff"), "nome" : "Mauricio", "fone" : "5678", "idade" : 10 }
>db.minha_colecao.insert({ nome: "Monet", fone: "000",  idade: 100 })
ObjectId("4b912e9a6ef4")
>db.minha_colecao.find()
{ "_id" : ObjectId("4b808e9a6eff"), "nome" : "Mauricio", "fone" : "5678", "idade" : 10 }
{ "_id" : ObjectId("4b912e9a6ef4"), "nome" : "Monet", "fone" : "000", "idade" : 100 }

Para atualizar os documentos podemos após o hash passar o parâmetro “true” que força uma inserção caso o critério utilizado não seja encontrado.

>db.minha_colecao.update({nome: "Mauricio"}, {nome: "Amorim", fone: "000"}, true)
>db.minha_colecao.find()
{ "_id" : ObjectId("4b808e9a6eff"), "nome" : "Amorim", "fone" : "000", "idade" : 10 }
{ "_id" : ObjectId("4b912e9a6ef4"), "nome" : "Monet", "fone" : "000", "idade" : 100 }
>db.minha_colecao.update({nome:"Inexistente"},{nome:"Insere novo", fone:"2355"}, true)
>db.minha_colecao.find()
{ "_id" : ObjectId("4b808e9a6eff"), "nome" : "Amorim", "fone" : "000", "idade" : 10 }
{ "_id" : ObjectId("4b912e9a6ef4"), "nome" : "Monet", "fone" : "000", "idade" : 100 }
{ "_id" : ObjectId("4b987e9a6e10"), "nome" : "Insere novo", "fone" : "2355"}

Por último vamos remover todos os documentos seguindo um determinado critério, neste caso o “fone” igual a “000″. Cuidado! Se o parâmetro com um critério não for informado todos os documentos da coleção serão removidos.

>db.minha_colecao.remove({fone: "000"})
>db.minha_colecao.find()
{ "_id" : ObjectId("4b987e9a6eff"), "nome" : "Insere um novo", "fone" : "2355"}

As funções utilizadas acima também podem receber um objeto como parâmetro e seu funcionamento será idêntico.

> xyz = { nome: "Monet", fone: "111", profissao: "artista" }
>db.minha_colecao.insert(xyz)
ObjectId("18b12e9a6ef4")
>db.minha_colecao.find()
{"_id": ObjectId("18b12e9a6ef4"), "nome":"Monet", "fone" : "111", "profissao" : "artista" }

Estes são comandos básicos de manipulação de dados, mais informações podem ser encontradas nas referências abaixo. Recomendo os screencasts do Joon You que são bem práticos.

Referências:
MongoDB DBA Operations
MongoDB Advanced Queries
Screencast – Introduction MongoDB with Joon You
The interactive shell by Kyle

seg
jan 4th

MongoDB no Ubuntu 9.10 ...

Atualizado em 20/02/2010

Algumas pessoas estão obtendo o seguinte erro ao tentar iniciar o serviço do MongoDB:

./mongod: error while loading shared libraries: libmozjs.so: cannot open shared object file: No such file or directory

Isto acontece após a atualização do Firefox no Ubuntu para versões superiores a 3.5, comigo ocorreu na versão 3.5.7,  porque o FF atualiza algum pacote do xulrunner e da biblioteca libmozjs.so ou algo similar.
Para corrigir isto é necessário recompilar o mongodb. Eu refiz a instalação a partir do SpiderMonkey e tudo voltou a funcionar.

Primeiramente fiz esta instalação direto no Ubuntu 9.10, acho que deve funcionar para a versão 9.04 também. O processo de instalação na verdade é mais cansativo do que complicado, precisa de uma conexão razoável para baixar todos os pacotes.

Então vamos começar removendo pacotes não utilizados:

sudo apt-get autoremove

Instalando as dependências:

sudo apt-get -y install tcsh git-core scons g++
sudo apt-get -y install libpcre++-dev libboost-dev
sudo apt-get -y install libreadline5-dev xulrunner-1.9.1-dev

Instale o SpiderMonkey que é uma implementação em C de JavaScript

cd ~
mkdir tmp && cd tmp
wget ftp://ftp.mozilla.org/pub/mozilla.org/js/js-1.7.0.tar.gz
tar -zxvf js-1.7.0.tar.gz
cd js/src
export CFLAGS="-DJS_C_STRINGS_ARE_UTF8"
make -f Makefile.ref
sudo JS_DIST=/usr make -f Makefile.ref export

Faça o download do MongoDB via git

cd ~/tmp
git clone git://github.com/mongodb/mongo.git

Agora basta instalar o mongoDB

cd mongo
scons all
sudo scons --prefix=/opt/mongo install

Para testá-lo crie um diretório:

mkdir -p ~/testing/mongo/data/db

e inicie o MongoDB:

/opt/mongo/bin/mongod --dbpath ~/testing/mongo/data/db

Se tudo ocorreu bem, acessando o endereço http://localhost:28018 você obterá informações sobre o MongoDB em ação.

Um pouco de prática:
- Começando com MongoDB
- MongoDB and MongoMapper

Referências:
- Building for Linux
- Building mongodb on Ubuntu

sex
nov 13th

Como instalar o Sqlite3 no Ubuntu ...

Atualização: 22/01/10

Para utilizar o Sqlite3 no Ubuntu para desenvolvimento com Ruby on Rails siga a ordem abaixo.

Instale os pacotes do Sqlite3 e da biblioteca:

sudo apt-get install sqlite3
sudo apt-get install libsqlite3-dev

Depois a gem do Sqlite:

sudo gem install sqlite3-ruby



Observações:
Recentemente tive problemas com o encoding do sqlite3 no Ubuntu 9.10. A seguinte mensagem de erro era apresentada.

rake aborted!
**uninitialized constant Encoding**  <----

No meu caso eu tinha duas gems que conflitavam

gem list sqlite

*** LOCAL GEMS ***
sqlite3 (0.0.6)
sqlite3-ruby (1.2.5)

Para resolver este problema é necessário deixar apenas a gem sqlite3-ruby

sudo gem uninstall sqlite3