Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Começando com o Atlas e a API de consulta do MongoDB

Nic Raboy11 min read • Published Jan 14, 2022 • Updated Oct 01, 2024
Atlas
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Início rápido
star-empty
star-empty
star-empty
star-empty
star-empty
MQL agora é MongoDB Query API! Saiba mais sobre essa maneira flexível e intuitiva de trabalhar com seus dados.
Dependendo de onde você está em sua carreia de desenvolvimento ou das tecnologias com as quais já está familiarizado, o MongoDB pode parecer um tanto temerário. Talvez você venha de anos de experiência com sistemas de gerenciamento de banco de dados relacionais (RDBMS) ou talvez seja novo no tópico de persistência de dados em geral.
A boa notícia é que o MongoDB não é tão assustador quanto você imagina e, definitivamente, é muito mais fácil quando combinado com as ferramentas corretas.
Neste tutorial, vamos ver como começar a usar o MongoDB Atlas para hospedar nosso cluster de banco de dados e a Linguagem de query do MongoDB (MQL) para interagir com nossos dados. Não exploraremos nenhuma tecnologia de programação específica, mas tudo o que vemos pode ser facilmente traduzido.

Hospedando Clusters MongoDB na Nuvem com o MongoDB Atlas

Existem algumas maneiras de começar a usar o MongoDB. Você pode instalar uma única instância ou um cluster de instâncias em seu próprio hardware, que você mesmo gerencia em termos de atualizações, escalabilidade e segurança, ou pode usar o MongoDB Atlas, que é um banco de dados como serviço (DBaaS) que torna a vida um pouco mais fácil e, em muitos casos, mais barata ou até gratuita.
Vamos trabalhar com um cluster Atlas de tamanho M0, que faz parte do nível gratuito que o MongoDB oferece. Não há expiração para este cluster e não há necessidade de cartão de crédito para implantá-lo.

Implementando um cluster de instâncias do MongoDB

Antes de podermos usar o MongoDB em nossos aplicativos, precisamos implantar um cluster. Crie uma conta noMongoDB Cloud e entre nela.
Escolha Criar um novo cluster se a opção não for apresentada imediatamente e comece a selecionar os recursos do seu cluster.
Criar um Novo Cluster do MongoDB Atlas
Criar um Novo Cluster do MongoDB Atlas
Você poderá escolher entre Amazon Web Services, GCP e Azure para hospedar seu cluster. É importante observar que esses provedores de nuvem são apenas para localização. Você nunca precisará entrar no provedor de nuvem ou gerenciar o MongoDB por meio deles. A localização é importante por motivos de latência, caso você tenha seus aplicativos hospedados em um provedor de nuvem específico.
Se você quiser aproveitar um cluster gratuito, certifique-se de escolher M0 para o tamanho do cluster.
Pode levar alguns minutos para concluir a criação do seu cluster.

Definindo regras de acesso à rede para o cluster de banco de dados NoSQL

Com o cluster criado, você não poderá acessá-lo de fora do dashboard da web por padrão. Isso é bom porque você não quer que pessoas aleatórias na Internet tentem obter acesso não autorizado ao seu cluster.
Para poder acessar seu cluster a partir da CLI, de um aplicativo web ou do Visual Studio Code, que usaremos mais tarde, você precisará configurar uma regra de rede que permita o acesso de um endereço IP específico.
Adicionar regras de IP de rede a um cluster do MongoDB
Adicionar regras de IP de rede a um cluster do MongoDB
Você tem algumas opções quando se trata de adicionar um IP à lista de permissões. Você pode adicionar seu IP atual, o que seria útil para o acesso a partir de sua rede local. Você pode fornecer um IP específico, o que é útil para aplicativos que você hospeda em algum lugar na cloud. Você também pode fornecer 0.0.0.0/0, o que permitiria acesso total à rede para qualquer pessoa, em qualquer lugar.
É altamente recomendável não adicionar 0.0.0.0/0 como regra de rede para manter seu cluster seguro.
Com endereços IP na lista de permissões, a etapa final é criar um usuário do aplicativo.

Criação de contas de acesso baseadas em roles para interagir com bancos de dados no cluster

É uma boa ideia criar contas de acesso baseadas em funções para seu MongoDB Atlas cluster. Isso significa que, em vez de criar um superusuário como a conta de administrador, você está criando uma conta de usuário com base no que o usuário deve fazer.
Por exemplo, talvez criemos um usuário que tenha acesso aos seus bancos de dados de contabilidade e outro usuário que tenha acesso ao seu banco de dados de funcionários.
No Atlas, escolha a guiaDatabase Access e clique em Add New Database User para adicionar um novo usuário.
Adicionar usuários com permissões de acesso a um cluster MongoDB Atlas
Adicionar usuários com permissões de acesso a um cluster MongoDB Atlas
Embora seja possível conceder a um usuário acesso a todos os bancos de dados, atuais e futuros, é melhor criar usuários que tenham permissões mais refinadas.
Você decide como deseja criar seus usuários, mas quanto mais específicas forem as permissões, menor a probabilidade de seu cluster ser comprometido por atividades maliciosas.
Precisa de mais alguma orientação para criar um Atlas cluster? Confira este tutorial de MaximeBeugnet sobre o assunto.
Com o cluster implantado, as regras de rede em vigor para seu endereço IP e um usuário criado, podemos nos concentrar em alguns dos fundamentos por trás da Linguagem de Query do MongoDB (MQL).

Consultando collections de banco de dados com a linguagem de query do MongoDB (MQL)

Para aproveitar ao máximo o MongoDB, você precisará se familiarizar com a linguagem de query do MongoDB (MQL). Não, não é como o SQL se você estiver familiarizado com os sistemas de gerenciamento de relational database (RDBMS), mas não é mais difícil. O MQL pode ser usado a partir da CLI, do Visual Studio Code, dos drivers de desenvolvimento e muito mais. Você terá a mesma experiência, não importa onde esteja tentando escrever suas queries.
Nesta seção, vamos nos concentrar no Visual Studio Code e na extensãoMongoDB Playground para gerenciar nossos dados. Estamos fazendo isso porque o Visual Studio Code é uma ferramenta de desenvolvimento comum e oferece uma experiência fácil de usar.

Configurar o código do Visual Studio para o MongoDB Playground

Embora possamos escrever nossas queries prontas para uso com o Visual Studio Code, não poderemos interagir com o MongoDB de forma significativa até instalarmos a extensãoMongoDB Playground .
No código do Visual Studio , abra o explorador de extensões e o Atlas Search para MongoDB.
Instale a extensão do MongoDB Visual Studio Code
Instale a extensão do MongoDB Visual Studio Code
Instale a extensão oficial com o MongoDB como editor.
Com a extensão instalada, precisaremos interagir com ela de dentro do Visual Studio Code. Há algumas maneiras de fazer isso, mas vamos usar a paleta de comandos.
Abra a paleta de comandos (cmd + shift + p, se você estiver no macOS) e digite MongoDB: Connect na caixa de entrada.
Conecte-se ao MongoDB com o Visual Studio Code
Conecte-se ao MongoDB com o Visual Studio Code
Você poderá inserir as informações do seu cluster MongoDB específico. Uma vez conectados, podemos prosseguir com a criação de um novo Playground. Se você já salvou suas informações na extensão do Visual Studio Code e precisa se conectar mais tarde, pode sempre digitar Show MongoDB na paleta de comandos e se conectar.
Supondo que estejamos conectados, insira Create MongoDB Playground na paleta de comandos para criar um novoarquivo com MQL padronizado.

Definindo um modelo de dados e um caso de uso para MongoDB

Em vez de apenas criar consultas aleatórias que podem ou não ser úteis ou diferentes das encontradas na documentação, criaremos um modelo de dados com o qual trabalhar e interagir com esse modelo de dados.
Como faço questão de jogar jogos, nosso exemplo será gira em torno de alguns dados de jogos que podem ter a seguinte aparência:
1{
2 "_id": "nraboy",
3 "name": "Nic Raboy",
4 "stats": {
5 "wins": 5,
6 "losses": 10,
7 "xp": 300
8 },
9 "achievements": [
10 { "name": "Massive XP", "timestamp": 1598961600000 },
11 { "name": "Instant Loss", "timestamp": 1598896800000 }
12 ]
13}
O documento acima é apenas um de uma possibilidade interminável de modelos de dados para um documento em qualquer coleção. Para tornar o exemplo mais interessante, o documento acima tem um objeto aninhado e uma array aninhada de objetos, algo que demonstra o poder do JSON, mas sem sacrificar a facilidade de trabalho no MongoDB.
O documento acima geralmente é chamado de documento de perfil de usuário no desenvolvimento de jogos. Você pode saber mais sobre as lojas de perfis de usuário no desenvolvimento de jogos por meio de um stream anterior do Twitch sobre o assunto.
A partir de agora, tudo bem se seu cluster não tiver bancos de dados, collection ou mesmo documentos que se pareçam com o documento acima. Nós vamos chegar a isso a seguir.

Criar, ler, atualizar e excluir (CRUD) documentos em uma coleção

Ao trabalhar com o MongoDB, você se familiarizará com as operações de criação, leitura, atualização e exclusão (CRUD) necessárias ao trabalhar com dados. Para repetir, usaremos o Visual Studio Code para fazer tudo isso, mas qualquer operação CRUD que você fizer no Visual Studio Code pode ser incluída no código do aplicativo, scripts e semelhantes.
Anteriormente, você deveria criar um novo MongoDB Playground no Visual Studio Code. Abra-o, remova todo o MQL clichê e adicione o seguinte:
1use("gamedev");
2
3db.profiles.insertOne({
4 "_id": "nraboy",
5 "name": "Nic Raboy",
6 "stats": {
7 "wins": 5,
8 "losses": 10,
9 "xp": 300
10 },
11 "achievements": [
12 { "name": "Massive XP", "timestamp": 1598961600000 },
13 { "name": "Instant Loss", "timestamp": 1598896800000 }
14 ]
15});
No código acima, estamos declarando que queremos usar um banco de dadosjogodev em nossas consultas a seguir. Está tudo bem se esse banco de dados ainda não existir porque será criado no tempo de execução.
Em seguida, estamos usando a operação insertOneno MongoDB para criar um único documento. O objeto dbfaz referência ao banco de dadosgamedev que escolhemos usar. O objetocollection faz referência a uma collection na qual queremos inserir nosso documento.
A collection deperfis não precisa existir antes de inserir nosso primeiro documento.
Não importa como escolhemos chamar nosso banco de dados, bem como nossa collection. Contanto que o nome faça sentido para você e para o caso de uso que você está tentando cumprir.
No código do Visual Studio, você pode destacar o MQL acima e escolher Executar linhas selecionadas do playground ou usar a paleta de comandos para executar todo o playground. Depois de executar o MQL, confira seu cluster MongoDB Atlas e você deverá ver o banco de dados, a coleção e o documento criados.
Mais informações sobre a funçãoinsertpodem ser encontradas na documentação oficial.
Se você preferir verificar se o documento foi criado sem realmente navegar pelo MongoDB Atlas, podemos passar para a próxima etapa da operação CRUD.
Dentro do playground, adicione o seguinte:
1use("gamedev");
2
3db.profiles.find({});
A operaçãofindacima retornará todos os documentos na coleçãode perfis. Se você quisesse restringir o conjunto de resultados, poderia fornecer critérios de filtro em vez de fornecer um objeto vazio. Por exemplo, tente executar o seguinte:
1use("gamedev");
2
3db.profiles.find({ "name": "Nic Raboy" });
A operaçãofindacima só retornará documentos onde o camponame corresponde exatamente aNic Raboy. Embora possamos fazer melhor. Que tal encontrar documentos dentro de um determinado intervalo para determinados campos.
Veja o exemplo a seguir:
1use("gamedev");
2
3db.profiles.find(
4 {
5 "stats.wins": {
6 "$gt": 6
7 },
8 "stats.losses": {
9 "$lt": 11
10 }
11 }
12);
A operaçãofindacima diz que queremos apenas documentos que tenham mais de seis vitórias e menos de onze perdas. Se estivermos executando a query acima com o conjunto de dados atual mostrado anteriormente, nenhum resultado seria retornado porque nada satisfaz as condições.
Você pode saber mais sobre os operadores de filtro que podem ser usados na documentação oficial.
Portanto, temos pelo menos um documento em nossa coleção e vimos os operadoresinsertOne e find . Agora precisamos dar uma olhada na atualização e excluir partes do CRUD.
Digamos que terminamos um jogo e o campostats.winsprecisa ser atualizado. Poderíamos fazer algo assim:
1use("gamedev")
2
3db.profiles.update(
4 { "_id": "nraboy" },
5 { "$inc": { "stats.wins": 1 } }
6);
O primeiro objeto na operaçãoupdateacima é o filtro. Este é o mesmo filtro que pode ser usado em uma operaçãofind. Depois de filtrarmos os documentos a serem atualizados, o segundo objeto é a mutação. No exemplo acima, estamos usando o operador$inc para aumentar o campostats.wins em um valor de um.
Existem alguns operadores que podem ser usados ao atualizar documentos. Você pode encontrar mais informações na documentação oficial.
Talvez não queiramos usar um operador ao atualizar o documento. Talvez queiramos alterar um campo ou adicionar um campo que pode não existir. Podemos fazer algo como o seguinte:
1use("gamedev")
2
3db.profiles.update(
4 { "_id": "nraboy" },
5 { "name": "Nicolas Raboy" }
6);
A query acima filtrará documentos com um _id de nraboye, em seguida, atualizará o camponame nesses documentos para ser uma string específica, neste caso "Nicolas Raboy". Se o camponame não existir, ele será criado e definido.
Tem um documento que deseja remover? Vamos dar uma olhada na parte final dos operadores CRUD.
Adicione o seguinte ao seu playground:
1use("gamedev")
2
3db.profiles.remove({ "_id": "nraboy" })
A remove operação acima usa um filtro, exatamente como vimos com find as update operações e . Fornecemos um filtro de documentos para encontrar e, nessa circunstância, quaisquer correspondências serão removidas da coleçãode perfis .
Para saber mais sobre a funçãoremove, consulte a documentação oficial.

Queries complexas com a pipeline de agregação de dados do MongoDB

Para muitos aplicativos, talvez você só precise usar operações CRUD básicas ao trabalhar com o MongoDB. No entanto, quando você precisa começar a analisar seus dados ou manipulá-los para gerar relatórios, executar um monte de operações CRUD pode não ser a melhor opção.
É aqui que um pipeline de agregação de dados MongoDB pode entrar em uso.
Para ter uma ideia do que é um pipeline de agregação de dados, pense nele como uma série de estágios de dados que devem ser concluídos antes que você tenha seus dados.
Vamos usar um exemplo melhor. Digamos que você queira examinar sua coleção deperfis e determinar todos os jogadores que receberam uma determinada conquista após uma certa data. No entanto, você só quer saber a conquista específica e as informações básicas sobre o jogador. Você não quer saber informações genéricas que correspondam à sua consulta.
Dê uma olhada no seguinte:
1use("gamedev")
2
3db.profiles.aggregate([
4 { "$match": { "_id": "nraboy" } },
5 { "$unwind": "$achievements" },
6 {
7 "$match": {
8 "achievements.timestamp": {
9 "$gt": new Date().getTime() - (1000 * 60 * 60 * 24 * 1)
10 }
11 }
12 },
13 { "$project": { "_id": 1, "achievements": 1 }}
14]);
Existem quatro estágios no pipeline acima. Primeiro, estamos fazendo um $match para encontrar todos os documentos que correspondam ao nosso filtro. Esses documentos são enviados para o próximo estágio do pipeline. Em vez de procurar e tentar trabalhar com o campoachievements que é uma array, estamos escolhendo $unwind ele.
Para se ter uma ideia melhor de como isso se parece, no final do segundo estágio, todos os dados encontrados ficariam assim:
1[
2 {
3 "_id": "nraboy",
4 "name": "Nic Raboy",
5 "stats": {
6 "wins": 5,
7 "losses": 10,
8 "xp": 300
9 },
10 "achievements": {
11 "name": "Massive XP",
12 "timestamp": 1598961600000
13 }
14 },
15 {
16 "_id": "nraboy",
17 "name": "Nic Raboy",
18 "stats": {
19 "wins": 5,
20 "losses": 10,
21 "xp": 300
22 },
23 "achievements": {
24 "name": "Instant Loss",
25 "timestamp": 1598896800000
26 }
27 }
28]
Observe na resposta JSON acima que não estamos mais trabalhando com uma array. Deveriamos ter combinado apenas em um único documento, mas os resultados são, na verdade, dois em vez de um. Isso ocorre porque o $unwind dividia a array em vários objetos.
Aplainamos a array e agora estamos no terceiro estágio do pipeline. Queremos corresponder a qualquer objeto no resultado que tenha um registro de data e hora de realização maior que um tempo específico. O plano aqui é reduzir o conjunto de resultados de nossos documentos achatados.
O estágio final de nosso pipeline é gerar saída somente os campos em que estamos interessados. Com o $project, estamos dizendo que queremos apenas o campo_id e o campo achievements.
Nossa saída final para essa agregação pode ficar assim:
1[
2 {
3 "_id": "nraboy",
4 "achievements": {
5 "name": "Instant Loss",
6 "timestamp": 1598896800000
7 }
8 }
9]
Existem alguns operadores quando se trata do pipeline de agregação de dados, muitos dos quais podem fazer coisas muito mais extravagantes do que os quatro estágios do pipeline que foram usados para este exemplo. Você pode aprender sobre os outros operadores na documentação oficial.

Conclusão

Você acabou de ter uma amostra do que você pode fazer com o MongoDB Atlas e a MongoDB Query Language (MQL). Embora o objetivo deste tutorial fosse familiarizá-lo com a implantação de um cluster e a interação com seus dados, você pode ampliar seu conhecimento e este exemplo explorando os drivers de programação.
Veja os seguintes inícios rápidos, por exemplo:
Além das iniciações rápidas, você também pode conferir o curso da MongoDB University , MongoDB Aggregation, que se concentra na agregação de dados .
Como mencionado anteriormente, você pode fazer as mesmas queries entre idiomas com mínimas ou nenhuma alteração entre eles.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Início rápido
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Conecte com segurança o MongoDB aos clusters Kubernetes oferecidos na nuvem


Sep 09, 2024 | 4 min read
Notícias e Anúncios

Descontinuando o MongoDB Atlas GraphQL e serviços de hospedagem


Mar 12, 2024 | 2 min read
Tutorial

Analisando analyzers para criar o índice correto do Atlas Search para seu aplicativo


Aug 28, 2024 | 8 min read
Tutorial

Primeiros passos com o MongoDB Atlas e Ruby no Rails


Dec 11, 2023 | 6 min read
Sumário