Neste tutorial eu vou mostrar como criar e acessar um banco de dados MongoDB na nuvem. |
Na primeira parte do artigo criamos e hospedamos o nosso banco de dados no MongoLab e fizemos nosso primeiro acesso ao banco criando um documento.
Vamos continuar realizando outras operações com o nosso MongoDB na nuvem.
Nota: Para saber mais sobre o MongoDB leia este artigo : NET - Apresentando e usando o MongoDb - Macoratti
Apenas para recordar. Nosso banco de dados vendadb possui uma coleção Pessoas com as seguintes informações:
Atualizando dados de uma coleção
Vamos abrir o nosso projeto criado na pasta mongodb_demo no Visual Studio Code.
Para isso podemos abrir o VS Code e no menu File clicar em Open Folder e selecionar a pasta mongodb_demo.
Vamos criar um arquivo chamado update.js no projeto onde iremos definir o código que vai atualizar dados da nossa coleção Pessoas criada na aula anterior.
Clique no ícone New File para criar um novo arquivo no projeto e informe o nome update.js:
A seguir digite o código abaixo neste arquivo:
//Vamos importar os drivers nativos do mongodb
var mongodb = require('mongodb')
//Precisamos usar a interface "MongoClient" para se conectar com o servidor
var MongoClient = mongodb.MongoClient
// URL da conexão
var url = 'mongodb://usuario:senha@ds145380.mlab.com:45380/vendasdb'
// Usamos o método connect para se conectar com o servidor
MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Não foi possível se conectar com o servidor MongoDB. Error:', err)
}
else {
//feita a conexão
console.log('Conexão com o banco de dados estabelecida com sucesso')
// Obtem a coleção de documentos
var collection = db.collection('Pessoas')
// Atualiza dados
console.log('Alterando o email de Macoratti...')
//usando o comando update para atualizar dados
collection.update({ nome: 'Macoratti' }, { $set: { email: 'macoratti@alterado.com.br' } }, function (err, numUpdated) {
if (err) {
console.log(err);
} else if (numUpdated) {
console.log('Documento Atualizado com sucesso.', numUpdated)
} else {
console.log('Nenhum documento encontrado!')
}
//Fecha a conexão
db.close();
});
}
});
|
Abaixo vemos o mesmo código no VS Code:
Neste código estou criando uma instância do MongoClient e fazendo a conexão com o banco de dados mongoDB vendasdb criado no site mongolab.
A string de conexão usada é : mongodb://seu_usuario:sua_senha@ds145380.mlab.com:45380/vendasdb
A seguir estou obtendo a referência à coleção Pessoas via método db.Collection() e a seguir usando o método update para atualizar dados da coleção.
Nota: Para atualizar documentos no MongoDB temos 3 opções : UpdateOne, UpdateMany e ReplaceOne.
A sintaxe do comando update é a seguinte : db.collection.update(query, update, options)
Ele modifica um documento existente ou documentos em uma coleção. O método pode modificar campos especificados de um documento existente ou substituir todo o documento dependendo do parâmetro usado.
Para atualizar um campo específico podemos usar o operador $set que substitui o valor do campo com o valor especificado.(se o campo não existir ele será criado quando update for usado com o operador $set)
É o que estamos usando para atualizar o email do nome igual a 'Macoratti':
collection.update({ nome: 'macoratti' }, { $set: { email: 'macoratti@alterado.com.br' } }, function (err, numUpdated)
Vamos executar o arquivo update.js na janela de prompt de comando digitando: node update
Iremos obter o resultado abaixo para a execução com sucesso :
Acessando o banco e verificando a coleção Pessoas vemos que o email para 'Macoratti' foi alterado realmente:
Consultando dados de uma coleção
Vamos criar em nosso projeto o arquivo select.js e realizar uma consulta na coleção Pessoas.
Vamos consultar os dados do nome igual a 'Macoratti'.
Para isso inclua o código abaixo no arquivo select.js :
//Vamos importar os drivers nativos do mongodb
var mongodb = require('mongodb')
//Precisamos usar a interface "MongoClient" para se conectar com o servidor
var MongoClient = mongodb.MongoClient
// URL da conexão
var url = 'mongodb://usuario:senha@ds145380.mlab.com:45380/vendasdb'
// Usamos o método connect para se conectar com o servidor
MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Não foi possível se conectar com o servidor MongoDB. Error:', err)
}
else {
//feita a conexão
console.log('Conexão com o banco de dados estabelecida com sucesso')
// Obtem a coleção de documentos
var collection = db.collection('Pessoas')
// consulta dados
console.log('Consultando dados de Macoratti...')
// define o criterio para encontrar os dados collection.find({ nome: 'Macoratti' }).toArray(function (err, result) { if (err) { console.log(err); } else if (result.length) { console.log('Encontrado:', result); } else { console.log('Nenhum documento encontrado com o critério definido!'); } //fecha a conexão db.close(); }); } }); |
Neste código usamos o método find cuja sintaxe é : db.collection.find(query, projection)
Este método seleciona o documento(s) na coleção que atende o critério {nome: 'Macoratti'} e retorna um cursor para o documento(s) selecionado.
O parâmetro projection determina quais campos são retornados nos documentos correspondentes. Esse parâmetro toma um documento no seguinte formato: { field1: <value>, field2: <value> ... }
Obs: No nosso exemplo não estamos usando projection.
Vamos executar o arquivo select.js na janela de prompt de comando digitando: node select
Abaixo vemos o resultado exibindo os dados para o critério informado usando o método find :
Trabalhando com um cursor de dados
No
exemplo anterior usamos um .ToArray encadeado com find para
retornar o resultado, pois a execução apenas do metódo find irá retornar um
cursor db.
Nota: Um cursor é um ponteiro para o conjunto
de resultados de uma consulta. Os clientes podem iterar através de um cursor
para recuperar resultados.
E neste caso teríamos que iterar sobre o cursor para obter o resultado.
(No cliente Mongo Shell se você não atribuir o retorno do find para uma variável
o cursor gerado será iterado de forma automática 20 vezes para inicir os
resultados iniciais)
Ao usar toArray o mongo diz ao driver que queremos dados completos de
cada usuário.
Em outras palavras, quando você executa uma consulta procurando documentos usando find() , o que é retornado é um ponteiro para os resultados dessa consulta ao invés de todos os resultados de uma única vez (como você pode imaginar, isso pode ser impraticável e lento para resultados de conjuntos de dados muito grandes).
Essencialmente, o cursor é o canal que você usará para extrair todos os resultados de uma consulta do banco de dados. Vejamos um exemplo.
Vamos criar em nosso projeto o arquivo cursor.js e realizar uma consulta na coleção Pessoas.
Vamos consultar os dados para nome igual a 'Macoratti' => { "nome" : "Macoratti"}
Para isso inclua o código abaixo no arquivo cursor.js :
//Vamos importar os drivers nativos do mongodb
var mongodb = require('mongodb')
//Precisamos usar a interface "MongoClient" para se conectar com o servidor
var MongoClient = mongodb.MongoClient
// URL da conexão
var url = 'mongodb://usuario:senha@ds145380.mlab.com:45380/vendasdb'
// Usa o método connect para se conectar ao servidor
MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Não foi possível se conectar com o servidor MongoDB. Error:', err)
}
else {
//feita a conexão
console.log('Conexão com o banco de dados estabelecida com sucesso')
// Obtem a coleção de documentos
var collection = db.collection('Pessoas')
// consulta dados
console.log('Usando um cursor...')
//Obtemos um cursor com os dados para o critério informado
var cursor = collection.find({ nome: 'Macoratti' });
// Vamos ordenar pelo nome (no exemplo não terá efeito algum)
cursor.sort({ nome : -1 });
//Limita a 10 registros
cursor.limit(10);
//Pula 0 registros.
cursor.skip(0);
//Vamos iterar no resultado
cursor.each(function (err, doc) {
if (err) {
console.log(err);
} else {
console.log('Encontrado : ', doc);
}
});
}
});
|
Observe que obtemos um cursor usando o método find() e que percorremos o resultado usando o método cursor.each() que é aplicado a cada documento no cursor.
Nota: Por padrão o servidor MongoDB retorna o resultado das consultas em lotes (o tamanho do lote não deve exceder o tamanho máximo do documento BSON), para a maioria das consultas o primeiro lote retorna 101 documentos ou documentos até 1 MB, os lotes subsequentes retornam 4 MB.
Para executar o código digite: node cursor
Abaixo vemos o resultado no console :
Uma forma de reduzir o tamanho dos dados retornados para consultas no MongoDB é usar projection.
Na próxima parte do artigo vamos continuar a realizar mais algumas operações com o MongoDB criado na nuvem desta vez usando o Mongoose.
(Disse Jesus) Na
verdade, na verdade vos digo que quem ouve a minha palavra, e crê naquele que me
enviou, tem a vida eterna, e não entrará em condenação, mas passou da morte para
a vida.
João 5:24
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: