Beruflich Dokumente
Kultur Dokumente
v a rM o n g o o s e=r e q u i r e ( ' M o n g o o s e ' ) ; v a rd b=M o n g o o s e . c o n n e c t i o n ; d b . o n ( ' e r r o r ' ,c o n s o l e . e r r o r ) ; d b . o n c e ( ' o p e n ' ,f u n c t i o n ( ){ c o n s o l e . l o g ( ' C o n e c t a d oa oM o n g o D B . ' ) / /V a m o sa d i c i o n a rn o s s o sE s q u e m a s ,M o d e l o sec o n s u l t a sa q u i } ) ; M o n g o o s e . c o n n e c t ( ' m o n g o d b : / / l o c a l h o s t / t e s t ' ) ;
Ao executar nossa aplicao de exemplo podemos observar no console do MongoDB que foram abertas 5 conexes simultneas. Isto ocorre porque o Mongoose usa um conjunto de 5 conexes simultneas por padro que so compartilhadas por toda sua aplicao. Para melhorar o desempenho das nossas aplicaes vamos deix-las abertas, porm voc pode alterar o comportamento padro adicionando parmetros opcionais ao M o n g o o s e . c o n n e c t ( ) - o parmetro p o o l S i z e define a quantidade de conexes simultneas. Veja abaixo a sada do meu MongoDB exibindo que foram abertas 5 conexes simultneas:
S a tA u g3 11 1 : 1 2 : 2 1 . 8 2 7[ i n i t a n d l i s t e n ]c o n n e c t i o na c c e p t e df r o m1 2 7 . 0 . 0 . 1 : 6 4 4 1 3# 2( 1c o n n e c t i o nn o wo p e n ) S a tA u g3 11 1 : 1 2 : 2 1 . 8 3 0[ i n i t a n d l i s t e n ]c o n n e c t i o na c c e p t e df r o m1 2 7 . 0 . 0 . 1 : 6 4 4 1 4# 3( 2c o n n e c t i o n sn o wo p e n ) S a tA u g3 11 1 : 1 2 : 2 1 . 8 3 1[ i n i t a n d l i s t e n ]c o n n e c t i o na c c e p t e df r o m1 2 7 . 0 . 0 . 1 : 6 4 4 1 5# 4( 3c o n n e c t i o n sn o wo p e n ) S a tA u g3 11 1 : 1 2 : 2 1 . 8 3 1[ i n i t a n d l i s t e n ]c o n n e c t i o na c c e p t e df r o m1 2 7 . 0 . 0 . 1 : 6 4 4 1 6# 5( 4c o n n e c t i o n sn o wo p e n ) S a tA u g3 11 1 : 1 2 : 2 1 . 8 3 2[ i n i t a n d l i s t e n ]c o n n e c t i o na c c e p t e df r o m1 2 7 . 0 . 0 . 1 : 6 4 4 1 7# 6( 5c o n n e c t i o n sn o wo p e n )
Esquemas e Modelos
Para comear vamos precisar de um esquema (http://Mongoosejs.com/docs/guide.html) e um modelo (http://Mongoosejs.com/docs/models.html) para que possamos trabalhar com os dados que sero persistidos em nosso banco de dados MongoDB. Esquemas definem a estrutura dos documentos dentro de uma coleo e modelos so usados para criar instncias de dados que sero armazenados em documentos. Ns vamos fazer um banco de dados de filmes para acompanhar os filmes que tem cenas extras aps os crditos finais (tambm chamado de credit cookies). O cdigo abaixo mostra nosso esquema m o v i e S c h e m a e nosso modelo M o v i e criado.
v a rm o v i e S c h e m a=n e wM o n g o o s e . S c h e m a ( { t i t l e :{t y p e :S t r i n g} , r a t i n g :S t r i n g , r e l e a s e Y e a r :N u m b e r , h a s C r e d i t C o o k i e :B o o l e a n } ) ; v a rM o v i e=M o n g o o s e . m o d e l ( ' M o v i e ' ,m o v i e S c h e m a ) ;
A ltima linha deste cdigo compila o modelo M o v i e utilizando o esquema m o v i e S c h e m a como estrutura. O Mongoose tambm cria uma coleo no MongoDB chamada M o v i e s para estes documentos. Voc pode notar que o modelo M o v i e est em letra maiscula, isto porque quando um modelo compilado retornado uma funo construtora que ser usada para criar as instncias do modelo. As instncias criadas pelo construtor do modelo so documentos que sero persistidos pelo MongoDB ao utilizar a funo s a v e.
Observe que utilizamos uma String ao invs de um Nmero no campo r e l e a s e Y e a r e o Mongoose vai se encarregar de converter o dado para tipo especificado no esquema. Quando adicionamos estes dois cdigos dados nossa aplicao e executamos vemos que a funo s a v e vai fornecer um documento recm criado, observado pelo que foi impresso no console de nossa aplicao.
{_ _ v :0 , t i t l e :' T h o r ' , r a t i n g :' P G 1 3 ' , r e l e a s e Y e a r :2 0 1 1 , h a s C r e d i t C o o k i e :t r u e , _ i d :5 2 2 2 0 1 2 c b 6 5 e d d f 0 0 3 0 0 0 0 0 1}
Colees no MongoDB possuem esquemas flexveis, isto quer dizer que colees no impem a estrutura dos documentos. Na prtica isto significa que documentos da mesma coleo no precisam ter o mesmo conjunto de campos ou estrutura, e campos comuns em documentos de uma coleo podem carregar diferentes tipos de dados. Como foi visto em nosso exemplo, utilizando o Mongoose para mapear nossa base, ele padroniza os documentos de um mesmo esquema a fim garantir que instncias do modelo que compilou aquele esquema sempre tenham o mesmo tipo de dados nos atributos especificados pelo esquema.
MongoDB tambm possui uma estrutura de dados chamada ndice (http://docs.mongodb.org/manual/core/indexes/) que permite voc localizar rpidamente documentos baseado nos valores armazenados em certos campos especficos. Fundamentalmente, ndices no MongoDB similar ndices em outros sistemas de banco de dados. Em nosso exemplo o ndice do modelo criado _ i d.
Mongoose tambm permite voc criar funes auxiliares estticas (http://Mongoosejs.com/docs/api.html#schema_Schema-static) para buscar seus dados. Para isso voc deve atribuir sua funo esttica ao esquema antes de ser feita compilao para o modelo.
m o v i e S c h e m a . s t a t i c s . f i n d A l l W i t h C r e d i t C o o k i e s=f u n c t i o n ( c a l l b a c k ){ r e t u r nt h i s . f i n d ( {h a s C r e d i t C o o k i e :t r u e} ,c a l l b a c k ) ; } ; v a rM o v i e=M o n g o o s e . m o d e l ( ' M o v i e ' ,m o v i e S c h e m a ) ; / /U t i l i z a d n oaf u n c a oa u x i l i a re s t a t i c ad om o d e l o' M o v i e 'c o m p i l a d o M o v i e . f i n d A l l W i t h C r e d i t C o o k i e s ( f u n c t i o n ( e r r ,m o v i e s ){ i f( e r r )r e t u r nc o n s o l e . e r r o r ( e r r ) ; c o n s o l e . d i r ( m o v i e s ) ; } ) ;
Isso tudo que precisa fazer para manipular os dados em MongoDB. Mongoose faz esta tarefa muito simples ento voc pode desenvolver seus servios rapidamente. Usando isso junto com suas habilidades com Express, voc pode desenvolver um aplicativo web muito bom e funcional. Abaixo est um cdigo utilizando os conceitos aqui apresentados que implementa a funo auxiliar esttica, para buscar todos filmes com credit cookies, salva 3 filmes do Thor com credit cookies e em seguida cria um T i m e o u t para buscar os filmes utilizando a funo auxiliar 1 segundo depois - Isto feito pois como estamos trabalhando com IO no bloqueante o Node no aguarda o tempo de salvar os filmes antes de prosseguir, por isso damos um tempo para se certificar que eles foram salvos antes de busc-los.
v a rM o n g o o s e=r e q u i r e ( ' M o n g o o s e ' ) ; v a rd b=M o n g o o s e . c o n n e c t i o n ; d b . o n ( ' e r r o r ' ,c o n s o l e . e r r o r ) ; d b . o n c e ( ' o p e n ' ,f u n c t i o n ( ){ / /C r e a t ey o u rs c h e m a sa n dm o d e l sh e r e . c o n s o l e . l o g ( ' C o n e c t a d o . ' )
v a rm o v i e S c h e m a=n e wM o n g o o s e . S c h e m a ( { t i t l e :{t y p e :S t r i n g} , r a t i n g :S t r i n g , r e l e a s e Y e a r :N u m b e r , h a s C r e d i t C o o k i e :B o o l e a n } ) ;
f o r( v a ri= 1 ;i < = 3 ;i + + ) { v a rt h o r=n e wM o v i e ( { t i t l e :' T h o r'+i , r a t i n g :' P G 1 3 ' , r e l e a s e Y e a r :' 2 0 1 1 ' , / /N o t eou s od eS t r i n ga oi n v e sd eN u m b e r h a s C r e d i t C o o k i e :t r u e } ) ; t h o r . s a v e ( f u n c t i o n ( e r r ,t h o r ){ i f( e r r )r e t u r nc o n s o l e . e r r o r ( e r r ) ; c o n s o l e . l o g ( ' S a l v o :' ) c o n s o l e . d i r ( t h o r ) ; } ) ; }
Arquivo (/arquivo/)
(/mineracao-de-dados-e-as-funcoes-map-reduce-filter/)
8 Comentrios
Ordenar por Melhor
NodeBR
Partilhar
Autenticar
Favorito
Participar no debate
Thyago Luciano 3
4 meses atrs
2 meses atrs
Acho que uma forma mais robusta de aguardar o fim da execuo dos saves seria utilizar promises ao invs de colocar o timeout hehehe, belo post! Parabns
Responder Partilhar
Eduardo Matos
7 meses atrs
Obrigado Eduardo, A inteno essa mesmo, mostrar para os novatos como fcil e divertido subir aplicaes utilizando Node no back-end.
1 Uli Oreggia
Responder Partilhar
7 meses atrs
Muito bom mesmo! Estava com dificuldade de compreender o funcionamento do Mongoose e esse post resolveu
Responder Partilhar
Obrigado Uli Oreggia. A ideia fortalecer cada vez mais comunidade brasileira de Nodejs. Full-stack JavaScript e Single Page Apps so o futuro da web, e o Nodejs faz parte desse futuro. As aplicaes web vo se parecer cada vez mais com as aplicaes desktop.
1
Responder Partilhar
7 meses atrs
Obrigado Caio, voc sabe que voc uma grande inspirao para mim. =)
Responder Partilhar
Publicado em
31 de Agosto de 2013
Tags
dica 3 (/tags/#dica)
(http://rafadev.com/)
(https://github.com/rafadev7)
Posts relacionados
Livro - Aplicaes web real-time com Node.js (/livro-aplicacoes-web-real-time-com-node-js/) Minerao de dados e as funes map, reduce e filter (/mineracao-de-dados-e-as-funcoes-map-reducefilter/) Como evitar o inferno de callbacks (/como-evitar-o-inferno-de-callbacks/) Mdulos em Node.JS (/modulos-em-nodejs/) O que a NPM do Node.JS (/o-que-e-a-npm-do-nodejs/) Como usar o util.inspect em NodeJS (/como-usar-o-util-inspect-em-node-js/) Mdulos do Ncleo do Node (/modulos-do-nucleo-do-node/) Evoluindo de forma granular em Node (/evoluindo-de-forma-granular-em-node/) Eventos em Node (/eventos-em-node/) Entendendo o Node (/entendendo-o-node/)
Receba os novos artigos por email. Ou clique aqui e assine no seu leitor (http://feeds.feedburner.com/NodeBR/).