{"id":1983,"date":"2014-09-23T22:50:44","date_gmt":"2014-09-24T01:50:44","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=1983"},"modified":"2014-09-23T22:50:44","modified_gmt":"2014-09-24T01:50:44","slug":"minha-experiencia-com-mongodb-erros-acertos-e-dicas","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=1983","title":{"rendered":"Minha experi\u00eancia com MongoDB: erros, acertos e dicas"},"content":{"rendered":"<p>Um ano e meio atr\u00e1s embarquei em um projeto que antes da minha entrada j\u00e1 havia adotado o MongoDB.\u00a0Meu objetivo neste post \u00e9 relatar alguns dos nossos erros e acertos.<\/p>\n<h2>O que deu certo<\/h2>\n<p>N\u00e3o tivemos os problemas que lemos por a\u00ed\u00a0como locks em bases de dados e o desempenho que obtivemos foi excelente. Montar\u00a0um cluster com replica\u00e7\u00e3o de dados do tipo replica-set se mostrou um procedimento super tranquilo, assim como a configura\u00e7\u00e3o de sharding.<\/p>\n<p>Se voc\u00ea tem estruturas de dados cujos atributos podem variar bastante de um elemento para outro em uma mesma cole\u00e7\u00e3o e n\u00e3o liga para redund\u00e2ncia de informa\u00e7\u00f5es, MongoDB se mostra uma solu\u00e7\u00e3o <strong>muito\u00a0<\/strong>interessante. Ele funciona.<\/p>\n<p>J\u00e1 sabia algum tempo atr\u00e1s de algumas das suas limita\u00e7\u00f5es.\u00a0\u00c9\u00a0importante lembrar que limita\u00e7\u00e3o divulgada pelo fabricante n\u00e3o \u00e9 defeito, mas sim caracter\u00edstica. Uma limita\u00e7\u00e3o que surge &#8220;acidentalmente&#8221;, esta sim \u00e9 um defeito. Ali\u00e1s, na \u00e9poca cheguei a escrever sobre isto, alguns de voc\u00eas devem se <a title=\"Coisas que n\u00e3o te contam sobre MongoDB\" href=\"https:\/\/devkico.itexto.com.br\/?p=1621\">lembrar<\/a>.\u00a0Aqueles pontos que falei em outubro de 2013 ainda se mant\u00e9m (inclusive a vers\u00e3o em ingl\u00eas deste site foi parar no <a href=\"https:\/\/news.ycombinator.com\/item?id=6829773\">Hacker News<\/a>\u00a0gra\u00e7as a\u00a0este post).<\/p>\n<p>Sobre\u00a0desempenho a cr\u00edtica que fa\u00e7o \u00e9 sempre a mesma: benchmarks de internet n\u00e3o s\u00e3o v\u00e1lidos at\u00e9 que voc\u00ea tenha experi\u00eancia no <strong>seu<\/strong> projeto. No nosso caso o que deu certo\u00a0ocorreu por que satisfez dois requisitos.<\/p>\n<ul>\n<li>As estruturas de dados tinham atributos que realmente variavam bastante. Algo com atributos fixos\u00a0n\u00e3o seria adequado. Al\u00e9m disto documentos embarcados eram uma alternativa interessante: redund\u00e2ncia de dados n\u00e3o era um problema.<\/li>\n<li>Precis\u00e1vamos de algo cujo tempo de escrita fosse o menor poss\u00edvel e sab\u00edamos <strong>exatamente<\/strong> como estas estruturas deveriam se comportar.<\/li>\n<\/ul>\n<p>Aonde estes dois requisitos se aplicavam,\u00a0obtivemos sucesso.<\/p>\n<h2>E onde deu errado<\/h2>\n<p>Sabe estes dois requisitos que citei acima? S\u00e3o\u00a0aonde vejo\u00a0MongoDB funcionar perfeitamente at\u00e9 hoje nos projetos que passei. O principal problema foi causado por aquilo que mais temo: in\u00e9rcia mental.<\/p>\n<p>H\u00e1 aqueles momentos em que as pessoas est\u00e3o t\u00e3o habituadas com o modelo relacional que simplesmente n\u00e3o conseguem aceitar alguns fatos fundamentais\u00a0sobre o MongoDB:<\/p>\n<ul>\n<li>Ele n\u00e3o foi feito para lidar com relacionamentos entre diferentes documentos. Documentos embarcados funcionam bem, mas quando voc\u00ea vai lidar com documentos em outras cole\u00e7\u00f5es, ou mesmo na mesma, o m\u00e1ximo que voc\u00ea tem \u00e9 um quebra galho.<\/li>\n<li>MongoDB n\u00e3o foi feito para ter integridade referencial.<\/li>\n<li>Se os atributos da sua estrutura de dados s\u00e3o fixos e previs\u00edveis, o\u00a0<strong>registro<\/strong> \u00e9 a melhor op\u00e7\u00e3o, n\u00e3o o documento.<\/li>\n<li><strong>MongoDB n\u00e3o \u00e9 uma base de dados relacional<\/strong><\/li>\n<li>N\u00e3o h\u00e1 uma\u00a0implementa\u00e7\u00e3o nativa de transa\u00e7\u00f5es\u00a0ACID entre documentos e nem era objetivo dos projetistas deste SGBD fazer isto.<\/li>\n<\/ul>\n<p>Se seu sistema exige relacionamentos e integridade referencial \u00a0por que n\u00e3o usar uma base relacional? Quer\u00a0fazer bonito pra algum idiota? Use persist\u00eancia poliglota! MongoDB e seu SGBD relacional favorito, cada um em seu galho. Por que n\u00e3o tirar o melhor dos dois mundos?<\/p>\n<p>(implementar integridade referencial manualmente \u00e9 muito triste)<\/p>\n<h2>Dicas<\/h2>\n<p>A seguir est\u00e3o algumas dicas que ajudam bastante na ado\u00e7\u00e3o do MongoDB. Claro que h\u00e1 in\u00fameras outras, mas estas s\u00e3o as que considero mais importantes.<\/p>\n<h3>Use alguma biblioteca\/framework de mapeamento<\/h3>\n<p>Uma boa op\u00e7\u00e3o \u00e9 o <a href=\"http:\/\/projects.spring.io\/spring-data-mongodb\/\">Spring Data para MongoDB<\/a>. O modo como lida com o mapeamento de relacionamento entre documentos \u00e9 muito simples e pr\u00f3ximo daquele que estamos acostumados a trabalhar com JPA.<\/p>\n<p>(reparem na frase: &#8220;que estamos acostumados a trabalhar com JPA&#8221;. \u00c9\u00a0a tentativa inconsciente de aproximar o\u00a0MongoDB do modelo relacional! (ainda escrevo mais sobre isto no futuro))<\/p>\n<p>Mas j\u00e1 lhe digo que o Spring Data para MongoDB n\u00e3o \u00e9 perfeito: longe disto. H\u00e1 bugs e limita\u00e7\u00f5es, mas o lado positivo \u00e9 que se voc\u00ea abrir uma issue para a equipe de desenvolvimento do projeto e esta \u00a0for <strong>bem descrita<\/strong> (dica: envie c\u00f3digo reproduzindo\u00a0o problema), eles resolver\u00e3o rapidamente o problema. Quase todas as issues que abri foram atendidas em no m\u00e1ximo duas semanas, algumas na mesma semana de abertura.<\/p>\n<p>H\u00e1 outras alternativas tamb\u00e9m, como o <a href=\"https:\/\/github.com\/mongodb\/morphia\">Morphia<\/a>, que funcionam muito bem, mas como nosso projeto era baseado em Spring, era mais interessante usar algo pertencente ao mesmo stack.<\/p>\n<p>(ao que tudo indica o desenvolvimento do Spring Data est\u00e1 bem mais ativo tamb\u00e9m)<\/p>\n<h3>Conhe\u00e7a BEM o driver Java (ou da sua linguagem) do MongoDB<\/h3>\n<p>Estes frameworks de mapeamento quebram um bom galho mas h\u00e1 um pre\u00e7o: muitas vezes s\u00e3o lentos. Em aplica\u00e7\u00f5es que precisem de\u00a0alto desempenho voc\u00ea ir\u00e1 observar que seu gargalo n\u00e3o estar\u00e1 no MongoDB, mas sim no c\u00f3digo Java presente nestas bibliotecas.<\/p>\n<p>Sendo assim, conhecendo bem o driver Java do MongoDB ir\u00e1 lhe ajudar horrores na hora em que precisar lidar com estes gargalos. Se seu sistema for basicamente CRUD, a\u00ed sim voc\u00ea pode ficar apenas com as bibliotecas.<\/p>\n<p>Outro ponto fundamental \u00e9 que pelo driver Java voc\u00ea consegue fazer praticamente qualquer coisa no MongoDB. Muitas vezes h\u00e1 um ou outro recurso que n\u00e3o est\u00e1 presente ainda na sua API de mapeamento favorita.<\/p>\n<h3>Precisa de transacionalidade entre documentos com MongoDB?<\/h3>\n<p>Se respondeu a sim esta pergunta e n\u00e3o quer usar uma base relacional, sua vida acaba de ficar \u00a0dif\u00edcil, mas n\u00e3o imposs\u00edvel. MongoDB <a href=\"http:\/\/docs.mongodb.org\/manual\/faq\/fundamentals\/\">oferece atomicidade em opera\u00e7\u00f5es sobre um \u00fanico documento, mas n\u00e3o entre documentos<\/a>. Sempre tenha isto em mente.<\/p>\n<p>Voc\u00ea pode\u00a0implementar manualmente transacionalidade entre documentos, mas esta ser\u00e1 bem limitada. No site do MongoDB h\u00e1 um tutorial que voc\u00ea pode <a href=\"http:\/\/docs.mongodb.org\/manual\/tutorial\/perform-two-phase-commits\/\">consultar<\/a>. O problema \u00e9 que isto d\u00e1 muito trabalho.<\/p>\n<p>Vou falar sobre uma solu\u00e7\u00e3o melhor para este problema mais a frente.<\/p>\n<h3>N\u00e3o pensou no espa\u00e7o que estes bancos de dados ocupam?<\/h3>\n<p>Yeap, eu j\u00e1 havia falado sobre isto <a href=\"https:\/\/devkico.itexto.com.br\/?p=1621\">antes<\/a>. As bases de dados do MongoDB podem crescer bastante se voc\u00ea n\u00e3o ficar atento. Leve isto em considera\u00e7\u00e3o se n\u00e3o quiser levar um susto com o custo do seu storage. \u00c9 sempre bom fazer algumas simula\u00e7\u00f5es do ambiente de produ\u00e7\u00e3o antes de adotar o MongoDB: ir\u00e1 lhe poupar muito tempo, dinheiro e sa\u00fade.<\/p>\n<p>Lembra aquela solu\u00e7\u00e3o que havia prometido? Ei-la!<\/p>\n<h3>Considere seriamente a ado\u00e7\u00e3o do TokuMX ao inv\u00e9s do MongoDB<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1990\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2014\/09\/tokutek.jpg\" alt=\"tokutek\" width=\"200\" height=\"48\" \/><\/p>\n<p>Sabia que o MongoDB tem um irm\u00e3o g\u00eameo bem mais charmoso? Trata-se de uma distribui\u00e7\u00e3o alternativa chamada\u00a0<a href=\"http:\/\/www.tokutek.com\/products\/tokumx-for-mongodb\/\">TokuMX<\/a>: tamb\u00e9m \u00e9 open source e \u00e9 desenvolvido por uma empresa chamada TokuTek.<\/p>\n<p>Bom: o que ele\u00a0tem de bom?<\/p>\n<ul>\n<li>Resolve seu problema de espa\u00e7o de armazenamento: uma de nossas bases no MongoDB ocupa 400Mb. No TokuMX? 15Mb.<\/li>\n<li>TokuMX implementa t<a href=\"http:\/\/www.tokutek.com\/mongodb-transactions\/\">ransa\u00e7\u00e3o ACID entre documentos<\/a>. Sim, voc\u00ea leu certo, e ela funciona MUITO bem.<\/li>\n<li>Apresenta desempenho bastante superior<\/li>\n<\/ul>\n<p>E o melhor: 100% compat\u00edvel. Se voc\u00ea trocar sua instala\u00e7\u00e3o MongoDB pelo TokuMX sua aplica\u00e7\u00e3o n\u00e3o notar\u00e1 diferen\u00e7a alguma al\u00e9m da melhoria de desempenho. At\u00e9 este momento s\u00f3 vi dois por\u00e9ns com o TokuMX:<\/p>\n<ul>\n<li>Ainda n\u00e3o h\u00e1 uma distribui\u00e7\u00e3o para Windows.<\/li>\n<li>Infelizmente as bibliotecas atuais n\u00e3o oferecem suporte nativo \u00e0 implementa\u00e7\u00e3o ACID do MongoDB: voc\u00ea ter\u00e1 de usar o driver nativo para obter este resultado. Existe uma <a href=\"https:\/\/jira.spring.io\/browse\/DATAMONGO-736\">issue <\/a>no projeto Spring Data pedindo este suporte, mas n\u00e3o \u00e9 priorit\u00e1ria ainda\u00a0(mesmo eu pedindo :) ).<\/li>\n<\/ul>\n<h3>Treine BEM a sua equipe<\/h3>\n<p>Este \u00e9 um ponto fundamental: voc\u00ea precisa expor para os membros do seu time o modo como devemos pensar a persist\u00eancia\u00a0<strong>fora do modelo relacional<\/strong>. \u00c9 a \u00fanica cura que conhe\u00e7o para o problema da in\u00e9rcia mental.<\/p>\n<h2>Conclus\u00f5es<\/h2>\n<p>Estas foram minhas experi\u00eancias com o MongoDB. Quanto mais cedo voc\u00ea detectar estas dificuldades que mencionei, melhor. Espero com este post ter dado minha contribui\u00e7\u00e3o. Devo confessar que at\u00e9 hoje a maior parte das reclama\u00e7\u00f5es que vejo sobre o MongoDB n\u00e3o s\u00e3o culpas da ferramenta, mas sim do seu mal uso.<\/p>\n<p>E, pra finalizar MESMO: experimentem o TokuMX, \u00e9 um produto muito superior e vai te poupar muito tempo. :)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como foi minha experi\u00eancia com MongoDB e Java at\u00e9 agora<\/p>\n","protected":false},"author":1,"featured_media":683,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[6,66,54],"tags":[],"class_list":["post-1983","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","category-mongodb-nosql","category-nosql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Minha experi\u00eancia com MongoDB: erros, acertos e dicas - \/dev\/Kico<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devkico.itexto.com.br\/?p=1983\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Minha experi\u00eancia com MongoDB: erros, acertos e dicas - \/dev\/Kico\" \/>\n<meta property=\"og:description\" content=\"Como foi minha experi\u00eancia com MongoDB e Java at\u00e9 agora\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=1983\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2014-09-24T01:50:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/logo-mongodb-onwhite.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@loboweissmann\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1983\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=1983\",\"name\":\"Minha experi\u00eancia com MongoDB: erros, acertos e dicas - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1983#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1983#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/logo-mongodb-onwhite.png\",\"datePublished\":\"2014-09-24T01:50:44+00:00\",\"dateModified\":\"2014-09-24T01:50:44+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1983#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=1983\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1983#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/logo-mongodb-onwhite.png\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/logo-mongodb-onwhite.png\",\"width\":\"1500\",\"height\":\"500\",\"caption\":\"Link para baixar o PDF\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1983#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Minha experi\u00eancia com MongoDB: erros, acertos e dicas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\",\"url\":\"https:\/\/devkico.itexto.com.br\/\",\"name\":\"\/dev\/Kico\",\"description\":\"Desenvolvendo software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devkico.itexto.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\",\"name\":\"Kico (Henrique Lobo Weissmann)\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"caption\":\"Kico (Henrique Lobo Weissmann)\"},\"sameAs\":[\"https:\/\/x.com\/loboweissmann\"],\"url\":\"https:\/\/devkico.itexto.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Minha experi\u00eancia com MongoDB: erros, acertos e dicas - \/dev\/Kico","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/devkico.itexto.com.br\/?p=1983","og_locale":"pt_BR","og_type":"article","og_title":"Minha experi\u00eancia com MongoDB: erros, acertos e dicas - \/dev\/Kico","og_description":"Como foi minha experi\u00eancia com MongoDB e Java at\u00e9 agora","og_url":"https:\/\/devkico.itexto.com.br\/?p=1983","og_site_name":"\/dev\/Kico","article_published_time":"2014-09-24T01:50:44+00:00","og_image":[{"width":"1500","height":"500","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/logo-mongodb-onwhite.png","type":"image\/png"}],"author":"Kico (Henrique Lobo Weissmann)","twitter_card":"summary_large_image","twitter_creator":"@loboweissmann","twitter_misc":{"Escrito por":"Kico (Henrique Lobo Weissmann)","Est. tempo de leitura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=1983","url":"https:\/\/devkico.itexto.com.br\/?p=1983","name":"Minha experi\u00eancia com MongoDB: erros, acertos e dicas - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=1983#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=1983#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/logo-mongodb-onwhite.png","datePublished":"2014-09-24T01:50:44+00:00","dateModified":"2014-09-24T01:50:44+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=1983#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=1983"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=1983#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/logo-mongodb-onwhite.png","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/logo-mongodb-onwhite.png","width":"1500","height":"500","caption":"Link para baixar o PDF"},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=1983#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Minha experi\u00eancia com MongoDB: erros, acertos e dicas"}]},{"@type":"WebSite","@id":"https:\/\/devkico.itexto.com.br\/#website","url":"https:\/\/devkico.itexto.com.br\/","name":"\/dev\/Kico","description":"Desenvolvendo software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devkico.itexto.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7","name":"Kico (Henrique Lobo Weissmann)","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","caption":"Kico (Henrique Lobo Weissmann)"},"sameAs":["https:\/\/x.com\/loboweissmann"],"url":"https:\/\/devkico.itexto.com.br\/?author=1"}]}},"jetpack_featured_media_url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/logo-mongodb-onwhite.png","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1983"}],"collection":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1983"}],"version-history":[{"count":4,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1983\/revisions"}],"predecessor-version":[{"id":1993,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1983\/revisions\/1993"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/media\/683"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}