<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ MongoDB - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ MongoDB - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Mon, 25 May 2026 15:27:12 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/mongodb/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Guia do GridFS: como fazer o upload de arquivos e imagens no MongoDB facilmente usando o Node ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Tarique Ejaz O armazenamento de arquivos é um recurso importante e necessário em vários processos e em diversos tipos de aplicações. A existência de processos como as Content Delivery Networks (CDNs – ou, em português, redes de entrega de conteúdo), configuradas através de opções de nuvem de terceiros ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/guia-do-gridfs-como-fazer-o-upload-de-arquivos-e-imagens-no-mongodb-facilmente-usando-o-node/</link>
                <guid isPermaLink="false">66f548dad8806d045024806b</guid>
                
                    <category>
                        <![CDATA[ MongoDB ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 26 Sep 2024 12:06:40 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/adobe-spark-post.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/gridfs-making-file-uploading-to-mongodb/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">GridFS Guide: How to Upload Files and Images to MongoDB Easily Using Node</a>
      </p><p>Escrito por: Tarique Ejaz</p><p>O armazenamento de arquivos é um recurso importante e necessário em vários processos e em diversos tipos de aplicações. A existência de processos como as Content Delivery Networks (CDNs – ou, em português, redes de entrega de conteúdo), configuradas através de opções de nuvem de terceiros como a Amazon Web Services, e de opções de armazenamento de arquivos locais sempre tornaram mais fácil a criação desse tipo de recurso.</p><p>No entanto, o conceito de armazenar arquivos diretamente em um banco de dados através de uma única chamada de API me intriga há muito tempo. Foi aí que o GridFS entrou em cena para mim.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/gridfs.png" class="kg-image" alt="gridfs" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/gridfs.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/gridfs.png 640w" width="640" height="199" loading="lazy"><figcaption><em>Provavelmente, essa não é a melhor maneira de implementar um sistema de armazenamento de arquivos</em></figcaption></figure><h2 id="o-que-o-gridfs-explica-o-simplificada">O que é o GridFS – explicação simplificada</h2><p>O MongoDB possui uma especificação de <em>driver</em> para upload e recuperação de arquivos chamada <a href="https://docs.mongodb.com/manual/core/gridfs/">GridFS</a>. O GridFS permite que você armazene e recupere arquivos, incluindo aqueles que excedem o limite de tamanho do documento BSON de <strong>16 MB</strong>.</p><p>Basicamente, o GridFS pega um arquivo e o divide em vários pedaços, que são armazenados como documentos individuais em duas coleções:</p><ul><li><em>a coleção <code>chunk</code></em> (que armazena as partes do documento) e</li><li><em>a coleção <code>file</code></em> (que armazena os metadados adicionais resultantes).</li></ul><p>Cada pedaço (em inglês, <em>chunk</em>) é limitado a 255 KB de tamanho. Isso significa que o último pedaço é normalmente igual ou menor que 255 KB. Parece bom, não?</p><p>Quando você lê a partir do GridFS, o <em>driver</em> recompõe todos os pedaços conforme necessário. Isso significa que você pode ler seções de um arquivo de acordo com o intervalo de sua consulta. Um exemplo disso é quando você escuta um trecho de um arquivo de áudio ou busca uma seção de um arquivo de vídeo.</p><p><strong>Observação:</strong> é preferível usar o GridFS para armazenar arquivos normalmente excedendo o limite de tamanho de 16 MB. Para arquivos menores, é recomendado usar o formato BinData para armazenar os arquivos em documentos únicos.</p><p>Isso resume como o GridFS funciona em geral. Hora de examinar um código funcionando e de ver como implementar um sistema assim.</p><h2 id="chega-de-papo-quero-ver-o-c-digo">Chega de papo, quero ver o código</h2><p>Estamos usando o Node.js com acesso a uma instância de nuvem do MongoDB para nossa configuração. Você pode encontrar o repositório de código para a aplicação de exemplo <a href="https://github.com/tarique93102/gridfs-file-storage">aqui</a>.</p><p>Vamos nos concentrar inteiramente em segmentos do código que se relacionam com as funcionalidades do GridFS. Vamos aprender como configurá-lo e usá-lo para armazenar arquivos, recuperar arquivos ou um arquivo específico e excluir um arquivo específico. Vamos começar.</p><h3 id="inicializando-a-engine-de-armazenamento">Inicializando a <em>engine</em> de armazenamento</h3><p>Os pacotes necessários para inicializar a <em>engine</em> são o <a href="https://www.npmjs.com/package/multer-gridfs-storage"><code>multer-gridfs-storage</code></a> e o <code><a href="https://www.npmjs.com/package/multer">multer</a></code>. Também usamos o <em>middleware</em> <code>method-override</code> para habilitar a operação de exclusão de arquivos. O módulo <code>crypto</code> do npm é usado para criptografar os nomes dos arquivos ao serem armazenados e lidos do banco de dados.</p><p>Quando a <em>engine</em> de armazenamento usando GridFS é inicializada, você só precisa chamá-la usando o <em>middleware</em> multer. Ela é então passada para a rota respectiva que executa as várias operações de armazenamento de arquivos.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-1.png" class="kg-image" alt="server-app-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/server-app-1.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-1.png 1766w" sizes="(min-width: 720px) 720px" width="1766" height="1598" loading="lazy"></figure><h3 id="inicializando-o-stream-do-gridfs">Inicializando o <em>stream </em>do GridFS</h3><p>Inicializamos um <em>stream</em> do GridFS conforme visto no código abaixo. O <em>stream</em> é necessário para ler os arquivos do banco de dados e também para ajudar a renderizar uma imagem em um navegador quando necessário.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-2.png" class="kg-image" alt="server-app-2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-2.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-2.png 1228w" sizes="(min-width: 720px) 720px" width="1228" height="1166" loading="lazy"></figure><h3 id="fazendo-o-upload-de-um-nico-arquivo-ou-imagem">Fazendo o upload de um único arquivo ou imagem</h3><p>Reutilizamos o <em>middleware</em> de <em>upload</em> que criamos anteriormente.</p><p><strong>Observação:</strong> o nome <code>file</code> é usado como parâmetro em <code>upload.single()</code>, pois temos a chave com um nome similar carregando o arquivo que está sendo enviado pelo <em>client</em>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-4.png" class="kg-image" alt="server-app-4" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-4.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-4.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-4.png 1396w" sizes="(min-width: 720px) 720px" width="1396" height="1958" loading="lazy"></figure><h3 id="fazendo-o-upload-de-v-rios-arquivos-ou-imagens">Fazendo o <em>upload</em> de vários arquivos ou imagens</h3><p>Também podemos fazer <em>upload </em>de vários arquivos de uma vez. Em vez de <code>upload.single()</code>, temos que simplesmente usar <code>upload.multiple(&lt;número de arquivos&gt;)</code>.</p><p><strong>Observação:</strong> o número de arquivos carregados pode ser menor que o número definido de arquivos.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-5.png" class="kg-image" alt="server-app-5" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-5.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-5.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-5.png 1564w" sizes="(min-width: 720px) 720px" width="1564" height="1058" loading="lazy"></figure><h3 id="buscando-todos-os-arquivos-do-banco-de-dados">Buscando todos os arquivos do banco de dados</h3><p>Usando o <em>stream </em>inicializado, podemos buscar todos os arquivos no banco de dados específico usando <code>gfs.find().toArray(...)</code>. Quando os arquivos são obtidos, mapeamos para um <em>array </em>e enviamos a resposta.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-6.png" class="kg-image" alt="server-app-6" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-6.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-6.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-6.png 1412w" sizes="(min-width: 720px) 720px" width="1412" height="1778" loading="lazy"></figure><h3 id="buscando-um-nico-arquivo-pelo-nome-do-arquivo">Buscando um único arquivo pelo nome do arquivo</h3><p>É muito simples consultar o GridFS para um único arquivo baseado em um atributo específico, como <code>filename</code> (o nome do arquivo). Usando o <em>stream</em> do GridFS, você pode consultar o banco de dados através da função <code>gfs.find({&lt;adicione sua consulta aqui&gt;})</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-7.png" class="kg-image" alt="server-app-7" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-7.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-7.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-7.png 1228w" sizes="(min-width: 720px) 720px" width="1228" height="1382" loading="lazy"></figure><h3 id="renderizando-no-navegador-uma-imagem-buscada">Renderizando no navegador uma imagem buscada</h3><p>Essa é uma parte um pouco mais complicada, pois você precisa não apenas buscar um arquivo do banco de dados, mas também renderizá-lo como uma imagem no respectivo navegador. Buscamos o arquivo normalmente. Não há nada de novo nesse processo.</p><p>Então, com a ajuda do método <code>openDownloadStreamByName()</code> no <em>stream</em> do gfs, podemos facilmente renderizar uma imagem, pois ele retorna um <em>stream</em> legível. Tendo feito isso, podemos usar o método <code>pipe()</code> do JavaScript para transmitir a resposta.</p><h3 id="excluindo-um-arquivo-espec-fico-por-id">Excluindo um arquivo específico por Id</h3><p>Excluir um arquivo também é simples. Usamos o método <code>delete()</code> com o parâmetro <code>_id</code> para consultar e excluir o arquivo em questão.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-9.png" class="kg-image" alt="server-app-9" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-9.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-9.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-9.png 1548w" sizes="(min-width: 720px) 720px" width="1548" height="1310" loading="lazy"></figure><p>Essas são as principais funcionalidades oferecidas pela <em>engine</em> de armazenamento. Eu utilizei os recursos do GridFS discutidos para criar uma aplicação simples de <em>upload</em> de imagens. Você pode ver o código em mais detalhes no <a href="https://github.com/tarique93102/gridfs-file-storage">repositório</a>.</p><h2 id="conclus-o">Conclusão</h2><p>Demorei um pouco e tive uma quantidade razoável de dificuldade para entender como usar o GridFS para um projeto pessoal. Por causa disso, queria garantir que ao menos outra pessoa não precisasse ter de gastar a mesma quantidade de tempo que eu nisso.</p><p>Dito isso, eu recomendo usar o GridFS com cautela. Não é uma solução universal para todos os seus problemas de armazenamento de arquivos. Ainda assim, é interessante conhecer essa especificação e saber de sua existência.</p><p>Se você tiver alguma dúvida ou questão que deseje apontar, fique à vontade para entrar em contato com o autor pelo <code><a href="https://www.linkedin.com/in/tarique-ejaz/">LinkedIn</a></code>.</p><p>Boa programação para você! 🙂</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como começar a trabalhar com o MongoDB em 10 minutos ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Navindu Jayatilake O MongoDB é um banco de dados NoSQL, orientado a documentos do tipo rich document. Se você é um completo iniciante em NoSQL, eu recomendo dar uma olhada no artigo sobre NoSQL [https://medium.com/@navindushane/say-no-to-sql-ab1e49aa7299] (texto em inglês) que publiquei anteriormente. Hoje, eu gostaria de compartilhar algumas das ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-comecar-a-trabalhar-com-o-mongodb-em-10-minutos/</link>
                <guid isPermaLink="false">6286115689eb8b0539f438e5</guid>
                
                    <category>
                        <![CDATA[ MongoDB ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 19 May 2022 15:24:40 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/1_Ta4qktHtO--RMUpnR08mBg.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/learn-mongodb-a4ce205e7739/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to get started with MongoDB in 10 minutes</a>
      </p><p>Escrito por: Navindu Jayatilake</p><p>O MongoDB é um banco de dados NoSQL, orientado a documentos do tipo <em>rich document</em>.</p><p>Se você é um completo iniciante em NoSQL, eu recomendo dar uma olhada no <a href="https://medium.com/@navindushane/say-no-to-sql-ab1e49aa7299" rel="noopener">artigo sobre NoSQL</a> (texto em inglês) que publiquei anteriormente.</p><p>Hoje, eu gostaria de compartilhar algumas das questões básicas sobre os comandos do MongoDB, como consultas, filtragem, exclusão, atualização e assim por diante.</p><p><strong>Bem<strong>, </strong>chega de papo<strong>, </strong>vamos trabalhar<strong>!</strong></strong></p><h3 id="configura-o"><strong>Configuração</strong></h3><p>Para trabalhar com o &nbsp;MongoDB, primeiramente, é preciso instalá-lo no seu computador. Para fazer isso, visite <a href="https://www.mongodb.com/download-center/community" rel="noopener">o centro de downloads oficial</a> (em inglês) e baixe a versão do seu sistema operacional específico. Para este artigo, utilizei o Windows.</p><p>Após baixar o setup do servidor do MongoDB em sua versão Community, você passará por uma sequência de pressionamentos do botão "Next" (ou "Avançar") no momento da instalação. Quando terminar, vá para a unidade C (provavelmente) onde você instalou o MongoDB. Vá até a pasta Arquivos de Programas (ou <em>Program Files</em>) e selecione o diretório do MongoDB.</p><pre><code>C: -&gt; Program Files -&gt; MongoDB -&gt; Server -&gt; 5.0(versão) -&gt; bin</code></pre><p>No diretório bin, você encontrará dois arquivos executáveis interessantes.</p><ul><li>mongod</li><li>mongo</li></ul><p>Vamos falar sobre esses dois arquivos.</p><p><em>mongod</em> significa "Mongo Daemon". mongod é um processo em segundo plano usado pelo MongoDB. A finalidade principal do mongod é gerenciar todas as tarefas do servidor do MongoDB. Exemplos dessas tarefas seriam aceitar solicitações, responder ao <em>client</em> e gerenciar a memória.</p><p><em>mongo</em> é um shell de linha de comando que pode interagir com o <em>client</em> (por exemplo, com administradores e desenvolvedores de sistemas).</p><p>Agora, vejamos como podemos colocar esse servidor a funcionar. Para fazer isso no Windows, primeiramente, você precisa criar alguns diretórios na sua unidade C. Abra o prompt de comando na unidade C e faça o seguinte:</p><pre><code>C:\&gt; mkdir data/db</code></pre><p>A finalidade desses diretórios é dar ao MongoDB uma pasta que ele necessita para armazenar todos os dados. O caminho de diretório padrão do MongoDB é <code>/data/db</code> na unidade. Assim, é necessário fornecer para ele esses diretórios.</p><p>Se você iniciar o servidor do MongoDB sem esses diretórios, provavelmente receberá a seguinte mensagem de erro:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/r04FRmRGqKUaclGh4ZDo3YsMwOlXMVm2T3bJ.jpg" class="kg-image" alt="r04FRmRGqKUaclGh4ZDo3YsMwOlXMVm2T3bJ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/r04FRmRGqKUaclGh4ZDo3YsMwOlXMVm2T3bJ.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/r04FRmRGqKUaclGh4ZDo3YsMwOlXMVm2T3bJ.jpg 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Tentando iniciar o servidor do mongodb sem os diretórios \data\db</figcaption></figure><p>Após criar essas duas pastas, volte à pasta bin que você tem no diretório do mongodb e abra o prompt de comando (ou o powershell) dentro dela. Execute o seguinte comando:</p><pre><code>mongod</code></pre><p>Aí está! Agora, seu servidor do MongoDB está pronto e funcionando!</p><p>Para trabalhar com esse servidor, precisamos de um mediador. Assim sendo, abra outra janela de comando dentro da pasta bin e execute o seguinte comando:</p><pre><code>mongo</code></pre><p>Depois de executar esse comando, navegue até o shell, onde executaremos o comando mongod (nosso servidor). Você verá uma mensagem dizendo "connection accepted" ("conexão aceita"). Isso significa que nossa instalação e configuração tiveram sucesso!</p><p>Agora, basta executar no shell do mongo:</p><pre><code>db</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/TK2JGg4JXAj0eG9JBzl89ABEF3JuKAwnw2dx.jpg" class="kg-image" alt="TK2JGg4JXAj0eG9JBzl89ABEF3JuKAwnw2dx" width="561" height="141" loading="lazy"><figcaption>Inicialmente, você tem um banco de dados (db) chamado de ‘test’</figcaption></figure><h4 id="configurando-as-vari-veis-de-ambiente"><strong>Configurando as variáveis de ambiente</strong></h4><p>Para economizar tempo, você pode configurar suas variáveis de ambiente. No Windows, fazemos isso nos menus abaixo:</p><pre><code>Configurações avançadas do sistema -&gt; Variáveis de ambiente -&gt; Path(Em variáveis do sistema) -&gt; Editar</code></pre><p>Simplesmente copie o caminho de sua pasta bin e pressione OK! No meu caso, está em <code>C:\Program Files\MongoDB\Server\5.0\bin</code></p><p>Tudo pronto!</p><h3 id="trabalhando-com-o-mongodb"><strong>Trabalhando com o MongoDB</strong></h3><p>Existem algumas GUIs (Interfaces Gráficas de Usuário) que funcionam com o servidor do MongoDB, como o MongoDB Compass, Studio 3T e assim por diante.</p><p>Eles fornecem uma interface gráfica para que você possa trabalhar facilmente com seu banco de dados e realizar consultas em vez de usar um shell e digitar as consultas manualmente.</p><p>Neste artigo, usaremos o prompt de comando para fazermos nosso trabalho.</p><p>Agora é o momento de mergulhar nos comando do MongoDB que ajudarão você a usá-lo com seus projetos futuros.</p><ol><li>Abra seu prompt de comando e digite <code>mongod</code><strong><strong><em><em> </em></em></strong></strong>para iniciar o servidor do MongoDB.</li></ol><p>2. Abra outro shell e digite <code>mongo</code><strong><strong><em><em> </em></em></strong></strong>para se conectar ao servidor de banco de dados do MongoDB.</p><h4 id="1-como-encontrar-o-banco-de-dados-em-que-voc-est-trabalhando-no-momento"><strong>1. Como encontrar o banco de dados em que você está trabalhando no momento</strong></h4><pre><code>db</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/o6puQoPSpGCW8-AgizHzAv3Qpywtzsgwd26N.jpg" class="kg-image" alt="o6puQoPSpGCW8-AgizHzAv3Qpywtzsgwd26N" width="561" height="126" loading="lazy"></figure><p>Esse comando mostrará o banco de dados em que você se encontra no momento. <code>test</code> é o banco de dados inicial, que vem por padrão.</p><h4 id="2-como-listar-os-bancos-de-dados"><strong>2. Como listar os bancos de dados</strong></h4><pre><code>show databases</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/Q-G8NzP5OAXh0Y3OfdOtqFxlFG-tLErPlPSi.jpg" class="kg-image" alt="Q-G8NzP5OAXh0Y3OfdOtqFxlFG-tLErPlPSi" width="562" height="205" loading="lazy"></figure><p>No momento, eu tenho quatro bancos de dados. São eles: <code>CrudDB</code>, <code>admin</code>, <code>config</code> e <code>local</code>.</p><h4 id="3-como-ir-para-um-banco-de-dados-espec-fico"><strong><strong><strong>3. </strong></strong>Como ir para um banco de dados específico</strong></h4><pre><code>use &lt;nome_do_bd&gt;</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/UIRueBuX-r6nRXA-qd6Uv95IBd0UbhVvMZtZ.jpg" class="kg-image" alt="UIRueBuX-r6nRXA-qd6Uv95IBd0UbhVvMZtZ" width="600" height="400" loading="lazy"></figure><p>Aqui, eu passei a usar o banco de dados <code>local</code>. Você pode conferir isso se tentar usar o comando <code>db</code><strong><strong> </strong></strong>para mostrar o nome do banco de dados atual.</p><h4 id="4-como-criar-um-banco-de-dados"><strong><strong><strong>4. </strong></strong>Como c<strong><strong>r</strong></strong>iar um banco de dados</strong></h4><p>Com os RDBMS (Sistemas de gerenciamento de bancos de dados relacionais), nós temos bancos de dados, tabelas, linhas e colunas.</p><p>Porém, nos bancos de dados NoSQL, como o MongoDB, os dados são armazenados no formato BSON (uma versão binária do JSON). Eles são armazenados em estruturas chamadas "collections" (coleções).</p><p>Nos bancos de dados SQL, eles seriam semelhantes às tabelas.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/e7ygVKXaPcqcqCyvurAeUzAbmmREoA6p72V2.jpg" class="kg-image" alt="e7ygVKXaPcqcqCyvurAeUzAbmmREoA6p72V2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/e7ygVKXaPcqcqCyvurAeUzAbmmREoA6p72V2.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/e7ygVKXaPcqcqCyvurAeUzAbmmREoA6p72V2.jpg 650w" width="650" height="450" loading="lazy"></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/oxeGaPqbZ2pmmZx3WcDo8CXIL4J09PbecBWW.png" class="kg-image" alt="oxeGaPqbZ2pmmZx3WcDo8CXIL4J09PbecBWW" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/oxeGaPqbZ2pmmZx3WcDo8CXIL4J09PbecBWW.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/oxeGaPqbZ2pmmZx3WcDo8CXIL4J09PbecBWW.png 702w" width="600" height="400" loading="lazy"><figcaption>Termos de SQL e NoSQL, por <a href="https://www.blogger.com/profile/18437865869379626284" rel="noopener">Victoria Malaya</a></figcaption></figure><p>Certo, vamos falar sobre como criar um banco de dados no shell do mongo.</p><pre><code>use &lt;nome_do_bd&gt;</code></pre><p>Espere, mas já usamos esse comando antes! Por que estamos usando esse comando novamente?</p><p>No servidor do MongoDB, se o seu banco de dados já estiver presente, ao usar esse comando, você irá para o banco de dados em questão.</p><p>Se o banco de dados, no entanto, não estiver presente, o servidor do MongoDB criará o banco de dados para você. Em seguida, navegaremos para ele.</p><p>Após criar um banco de dados, executar o comando <code>show database</code> não mostrará seu banco de dados recém-criado. Isso ocorre porque, até que ele tenha dados (documentos) internamente, ele não aparecerá em sua lista de bancos de dados.</p><h4 id="5-como-criar-uma-cole-o"><strong><strong><strong>5. C</strong></strong>omo c<strong><strong>r</strong></strong>iar uma coleção</strong></h4><p>Navegue até o banco de dados recém-criado com o comando <code>use</code>.</p><p>De fato, existem dias maneiras de se criar uma coleção. Vejamos as duas.</p><p>Uma maneira de inserir dados na coleção:</p><pre><code>db.myCollection.insert({"name": "john", "age" : 22, "location": "colombo"})</code></pre><p>Esse comando criará a coleção <code>myCollection</code><em><em> </em></em>mesmo que ela ainda não exista. Em seguida, serão inseridos na coleção um documento com <code>name</code><em><em> </em></em>e <code>age</code>. Elas são coleções sem limites de tamanho.</p><p>A segunda maneira é exibida abaixo:</p><p>2.1 Criar uma coleção sem limite de tamanho</p><pre><code>db.createCollection("myCollection")</code></pre><p>2.2 Criar uma coleção com limite de tamanho</p><pre><code>db.createCollection("mySecondCollection", {capped : true, size : 2, max : 2})</code></pre><p>Nesse momento, você criará uma coleção sem inserir dados.</p><p>Uma "coleção com limite" tem uma contagem máxima de documentos que evita o excesso de documentos.</p><p>Neste exemplo, habilitamos os limites ao definir o valor de <code>capped</code> como <code>true</code>.</p><p><code>size: 2</code> representa o limite de dois megabytes, enquanto <code>max: 2</code> define o número máximo de documentos como sendo 2.</p><p>Agora, se você tentar inserir mais de dois documentos a <code>mySecondCollection</code> e se usar o comando <code>find</code> (sobre o qual falaremos em instantes), você verá apenas os documentos inseridos mais recentemente. Lembre-se de que isso não significa que os primeiros elementos foram excluídos — eles apenas não estão sendo exibidos.</p><h4 id="6-como-inserir-dados"><strong><strong><strong>6. </strong></strong>Como i<strong><strong>nser</strong></strong>ir dados</strong></h4><p>Podemos inserir dados em uma nova coleção, ou em uma coleção previamente criada.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/uO4agHbI85kMJrQmF1L9pMmhn0WcgngmoPsI.jpg" class="kg-image" alt="uO4agHbI85kMJrQmF1L9pMmhn0WcgngmoPsI" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/uO4agHbI85kMJrQmF1L9pMmhn0WcgngmoPsI.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/uO4agHbI85kMJrQmF1L9pMmhn0WcgngmoPsI.jpg 605w" width="605" height="698" loading="lazy"><figcaption>Maneiras de se armazenar dados em um JSON: pares chave-valor, arrays de strings, objetos e arrays de objetos</figcaption></figure><p>Existem três métodos de inserção de dados.</p><ol><li><code>insertOne()</code> é usado para inserir um único documento.</li><li><code>insertMany()</code> é usado para inserir mais de documento.</li><li><code>insert()</code> é usado para inserir quantos documentos você quiser.</li></ol><p>Abaixo, temos alguns exemplos:</p><ul><li><strong><strong>insertOne()</strong></strong></li></ul><pre><code>db.myCollection.insertOne(
  {
    "name": "navindu", 
    "age": 22
  }
)</code></pre><ul><li><strong><strong>insertMany()</strong></strong></li></ul><pre><code>db.myCollection.insertMany([
  {
    "name": "navindu", 
    "age": 22
  },
  {
    "name": "kavindu", 
    "age": 20
  },

  {
    "name": "john doe", 
    "age": 25,
    "location": "colombo"
  }
])</code></pre><p>O método <code>insert()</code> é semelhante ao método <code>insertMany()</code>.</p><p>Além disso, observe que inserimos uma nova propriedade chamada <code>location</code><strong><strong><em><em> </em></em></strong></strong>no documento para <code>John Doe</code><em><em>. </em></em>Assim, se você usar<em><em> </em></em><code>find</code><strong><strong><em><em>, </em></em></strong></strong>verá somente para<em><em> </em></em><code>john doe</code> a propriedade <code>location</code><em><em> </em></em>anexada.</p><p>Essa pode ser uma vantagem no que diz respeito aos bancos de dados NoSQL, como o MongoDB, pois permite a escalabilidade.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/QyCgwWUHWoporNunUvoRgdVry-x0QyA8qSxd.jpg" class="kg-image" alt="QyCgwWUHWoporNunUvoRgdVry-x0QyA8qSxd" width="600" height="400" loading="lazy"><figcaption>Dados inseridos com sucesso</figcaption></figure><h4 id="7-como-consultar-dados"><strong><strong><strong>7. </strong></strong>Como consultar dados</strong></h4><p>Aqui está como você pode consultar todos os dados de uma coleção:</p><pre><code>db.myCollection.find()</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/rzcViLqDrTy5gqSFoY6n3N7dciNxFTY62eRL.jpg" class="kg-image" alt="rzcViLqDrTy5gqSFoY6n3N7dciNxFTY62eRL" width="600" height="400" loading="lazy"><figcaption>Resultado</figcaption></figure><p>Para você ver esses dados de modo mais claro, basta adicionar <code>.pretty()</code><em><em> </em></em>ao final do comando. Isso exibirá o documento em um formato melhor em JSON .</p><pre><code>db.myCollection.find().pretty()</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/gMIbpNqjr9jmJ3YVDZruX1skX0PCvSruuZWB.jpg" class="kg-image" alt="gMIbpNqjr9jmJ3YVDZruX1skX0PCvSruuZWB" width="600" height="400" loading="lazy"><figcaption>Resultado</figcaption></figure><p>Espere... nesses exemplos, você percebeu algo como <code>_id</code>? Como isso chegou aí?</p><p>Bem, sempre que você insere um documento, o MongoDB adiciona automaticamente um campo <code>_id</code>, o qual identifica exclusivamente cada documento. Se não quiser que ele seja exibido, basta executar o comando abaixo</p><pre><code>db.myCollection.find({}, _id: 0).pretty()</code></pre><p>A seguir, veremos a filtragem dos dados.</p><p>Se quiser exibir alguns documentos específicos, você pode especificar um único detalhe do documento que você deseja exibir.</p><pre><code>db.myCollection.find(
  {
    name: "john"
  }
)</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/TiBBNNp9gmxtPXaHd5BSZ7MkSrv1JkRzkMI1.jpg" class="kg-image" alt="TiBBNNp9gmxtPXaHd5BSZ7MkSrv1JkRzkMI1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/TiBBNNp9gmxtPXaHd5BSZ7MkSrv1JkRzkMI1.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/TiBBNNp9gmxtPXaHd5BSZ7MkSrv1JkRzkMI1.jpg 710w" width="600" height="400" loading="lazy"><figcaption>Resultado</figcaption></figure><p>Digamos que você queira exibir apenas pessoas cuja idade (em inglês, <code>age</code>) é inferior a 25. Você pode usar <code>$lt</code> para filtrar desse modo.</p><pre><code>db.myCollection.find(
  {
    age : {$lt : 25}
  }
)</code></pre><p>Da mesma forma que <code>$lt</code> representa "menor que", <code>$gt</code> representa "maior que", <code>$lte</code> representa "menor que ou igual a", <code>$gte</code> representa "maior que ou igual a" &nbsp;e &nbsp;<code>$ne</code> representa "diferente de".</p><h4 id="8-como-atualizar-documentos"><strong><strong><strong>8. </strong></strong>Como atualizar documentos</strong></h4><p>Suponhamos que você deseje atualizar a idade (<code>age</code>) e o endereço (<code>address</code>) de uma pessoa. Como fazer isso? Aqui temos um exemplo:</p><pre><code>db.myCollection.update({age : 20}, {$set: {age: 23}})</code></pre><p>O primeiro argumento é o campo de qual documento você deseja atualizar. Aqui, eu especifiquei <code>age</code> por questão de simplicidade. Em um ambiente de produção, você pode usar algo como o campo <code>_id</code>.</p><p>Sempre é melhor usar algo como o campo <code>_id</code> para atualizar uma única linha. Isso ocorre porque diversos campos podem ter os mesmos valores para <code>age</code> e <code>name</code>. Assim, se você atualizar uma única linha, afetará todas as linhas que tenham o mesmo nome e a mesma idade.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/qQH53vM6-peOzS-z9k5YjMoS9R2z1APJrXvB.jpg" class="kg-image" alt="qQH53vM6-peOzS-z9k5YjMoS9R2z1APJrXvB" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/qQH53vM6-peOzS-z9k5YjMoS9R2z1APJrXvB.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/qQH53vM6-peOzS-z9k5YjMoS9R2z1APJrXvB.jpg 674w" width="600" height="400" loading="lazy"><figcaption>Resultado</figcaption></figure><p>Se você atualizar um documento dessa maneira com uma nova propriedade - digamos, por exemplo, <code>location</code>- o documento será atualizado com o novo atributo. Se usar <code>find</code>, o resultado será:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/YqJpPAw7d5NPSTzStCevUmgoDTm6FkgPLZ-7.jpg" class="kg-image" alt="YqJpPAw7d5NPSTzStCevUmgoDTm6FkgPLZ-7" width="600" height="400" loading="lazy"><figcaption>Resultado</figcaption></figure><p>Se quiser remover uma propriedade de um único documento, você pode fazer algo assim (digamos que você queira excluir <code>age</code>):</p><pre><code>db.myCollection.update({name: "navindu"}, {$unset: age});</code></pre><h4 id="9-como-remover-um-documento"><strong><strong><strong>9. </strong></strong>Como remover um documento</strong></h4><p>Como mencionei anteriormente, quando você quiser atualizar ou excluir um documento, basta especificar o <code>_id</code>, não apenas <code>name</code>, <code>age</code> ou <code>location</code>.</p><pre><code>db.myCollection.remove({name: "navindu"});</code></pre><h4 id="10-como-remover-uma-cole-o"><strong><strong><strong>10. </strong></strong>Como remover uma coleção</strong></h4><pre><code>db.myCollection.remove({});</code></pre><p>Observe que isso não equivale ao método <code>drop()</code>. A diferença é que <code>drop()</code> é usado para remover todos os documentos dentro de uma coleção, enquanto o método <code>remove()</code> é usado para excluir todos os documentos, juntamente com a própria coleção.</p><h3 id="operadores-l-gicos"><strong>Operadores lógicos</strong></h3><p>O MongoDB oferece operadores lógicos. A imagem abaixo resume os tipos diferentes de operadores lógicos.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/xO27jGeclafiAUt0a0VYRifhDpISvZcIkhRD.png" class="kg-image" alt="xO27jGeclafiAUt0a0VYRifhDpISvZcIkhRD" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/xO27jGeclafiAUt0a0VYRifhDpISvZcIkhRD.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/xO27jGeclafiAUt0a0VYRifhDpISvZcIkhRD.png 659w" width="600" height="400" loading="lazy"></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/VsHbrchxUETWqCFhZc6QvmSPUdrbfOHYEH3L.jpg" class="kg-image" alt="VsHbrchxUETWqCFhZc6QvmSPUdrbfOHYEH3L" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/VsHbrchxUETWqCFhZc6QvmSPUdrbfOHYEH3L.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/VsHbrchxUETWqCFhZc6QvmSPUdrbfOHYEH3L.jpg 745w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Referência: manual do MongoDB</figcaption></figure><p>Digamos que você queira exibir as pessoas cuja idade é inferior a 25 e também aquelas cuja localidade é Colombo. O que podemos fazer?</p><p>Podemos usar o operador <code>$and</code>!</p><pre><code>db.myCollection.find({$and:[{age : {$lt : 25}}, {location: "colombo"}]});</code></pre><p>Para encerrar, vamos falar de <strong>agregação</strong>.</p><h3 id="agrega-o"><strong>Agregação</strong></h3><p>Um lembrete rápido sobre o que aprendemos sobre funções de agregação em bancos de dados em SQL:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/JHcuA7YLBiFiCBn1QiOS8NYCUELbGg-LKDSN.png" class="kg-image" alt="JHcuA7YLBiFiCBn1QiOS8NYCUELbGg-LKDSN" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/05/JHcuA7YLBiFiCBn1QiOS8NYCUELbGg-LKDSN.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/05/JHcuA7YLBiFiCBn1QiOS8NYCUELbGg-LKDSN.png 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Funções de agregação em bancos de dados em SQL. Referência: Tutorial Gateway</figcaption></figure><p>De um modo simplificado, a agregação agrupa valores de vários documentos e os resume de algum modo.</p><p>Imagine que temos alunos do gênero masculino e feminino em uma coleção <code>recordBook</code> e que queremos uma contagem total de cada um deles. Para obter a soma de masculinos (<code>male</code>) e femininos (<code>females</code>), poderíamos usar a função de agregação <code>$group</code>.</p><pre><code>db.recordBook.aggregate([
  {
    $group : {_id : "$gender", result: {$sum: 1}}
  }  
]);</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/05/NeK7Wx3lQ1AaUhGD1VERqmaluAl9qrsXpDMs.jpg" class="kg-image" alt="NeK7Wx3lQ1AaUhGD1VERqmaluAl9qrsXpDMs" width="600" height="400" loading="lazy"><figcaption>Resultado</figcaption></figure><h4 id="em-resumo"><strong>Em resumo</strong></h4><p>Aqui, discutimos o básico sobre o MongoDB que você precisará para criar uma aplicação. Espero que tenha gostado do artigo – obrigado pela leitura!</p><p>Se tiver perguntas com relação a este tutorial, fique à vontade para entrar em contato com o autor pelo <a href="https://www.facebook.com/navinduuu" rel="noopener">Facebook</a>, <a href="https://twitter.com/NavinduJay" rel="noopener">Twitter</a> ou <a href="https://www.instagram.com/iamnavindu/" rel="noopener">Instagram</a> (em inglês).</p><p>Vejo vocês em um próximo artigo! ❤️ ✌</p><p>Link para outro artigo do autor sobre o assunto: <a href="https://medium.com/@navindushane/say-no-to-sql-ab1e49aa7299" rel="noopener">NoSQL</a> (em inglês)</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
