Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Integrar MongoDB com Angular

Neste guia, você pode aprender como criar um aplicativo da web Angular que usa a pilha MEAN. A pilha MEAN é uma estrutura de desenvolvimento web que usa MongoDB, Express, Angular e Node.js e consiste nas seguintes camadas:

  • Camada de banco de dados: o MongoDB fornece armazenamento e recuperação de dados.

  • Camada de aplicativos: Express e Node.js compõem o nível intermediário da lógica do lado do servidor.

  • Camada de apresentação: o Angular implementa a interface do usuário e as interações de front-end.

Angular é uma estrutura TypeScript usada para criar aplicativos web dinâmicos. Ele fornece pacotes integrados para uma variedade de recursos de aplicativo, e sua arquitetura baseada em componentes torna os aplicativos altamente reutilizáveis.

Como o TypeScript é baseado em JavaScript, cada elemento da pilha MEAN é baseado em JavaScript e JSON. Como resultado, a integração entre estes elementos é simples. O front-end Angular cria documentos JSON que o MongoDB pode armazenar diretamente no formato BSON, uma extensão JSON binária, e o Express fornece uma framework mínima que usa JavaScript. O MongoDB oferece recursos avançados de indexação e query para documentos BSON e inclui um driver nativo para Node.js , o que o torna o armazenamento de dados ideal para aplicativos JavaScript.

Este tutorial mostra como criar um aplicativo da web usando a pilha MEAN. O aplicativo acessa dados de restaurantes de amostra, queries os dados e exibe os resultados em um site hospedado localmente. O tutorial também inclui instruções para se conectar a um cluster MongoDB hospedado no MongoDB Atlas e acessar e exibir dados de seu banco de dados.

Dica

Se você preferir se conectar ao MongoDB usando o driver Node.js sem o Angular, consulte o guia Introdução ao driver Node.js.

Siga as etapas nesta seção para instalar as dependências do projeto, criar um cluster do Atlas e configurar os diretórios do aplicativo.

1

Para criar o aplicativo Quick Start, instale o seguinte software em seu ambiente de desenvolvimento:

Pré-requisitos
Notas

Baixe a versão LTS mais recente ou a versão mais recente.

Instale globalmente executando npm install -g @angular/cli em seu terminal.

Editor de código

Use o editor de sua escolha.

Aplicativo de terminal e shell

Para usuários do MacOS, use o Terminal ou um aplicativo semelhante. Para usuários do Windows, use o PowerShell.

2

O MongoDB Atlas é um serviço de banco de dados de nuvem totalmente gerenciado que hospeda suas implementações do MongoDB . Se você não tiver uma implementação do MongoDB , poderá criar um cluster do MongoDB gratuitamente concluindo o tutorial de Introdução ao MongoDB . O tutorial de Introdução ao MongoDB também demonstra como carregar conjuntos de dados de exemplo em seu cluster, incluindo o sample_restaurants banco de dados usado neste tutorial.

Para se conectar ao cluster MongoDB, você deve usar um URI de conexão. Para aprender como recuperar seu URI de conexão, veja a seção Adicionar sua string de conexão do tutorial de Introdução ao MongoDB.

Importante

Salve sua string de conexão em um local seguro.

3

Execute os seguintes comandos no seu terminal para criar um diretório para seu projeto denominado angular-quickstart:

mkdir angular-quickstart
cd angular-quickstart

Em seguida, execute os seguintes comandos a partir do diretório angular-quickstart para criar uma pasta para o backend denominada server e inicializar o arquivo package.json:

mkdir server
cd server
npm init -y
4

Navegue até o package.json arquivo no angular-quickstart/server diretório. Para usar os módulos ECMAScript, o formato padrão para empacotar código JavaScript para reutilização, substitua a linha existente que especifica o "type" campo pela seguinte linha:

"type": "module",
5

Execute o seguinte comando para instalar as dependências mongodb, express, cors e dotenv:

npm install mongodb express cors dotenv

Este comando instala o MongoDB, o framework web Express, o pacote cors Node.js para compartilhamento de recursos entre origens e Dotenv para carregar variáveis de ambiente.

Em seguida, execute o seguinte comando para instalar o TypeScript e as definições de tipo necessárias:

npm install -D typescript @types/node @types/cors @types/express tsx

Este comando instala o TypeScript, definições de tipo para Node.js e Express, e tsx, uma ferramenta para executar arquivos TypeScript diretamente.

Após configurar a estrutura e as dependências do projeto, siga as etapas desta seção para configurar seu servidor da web e conectar-se ao MongoDB.

1

Crie um arquivo denominado server.ts no seu diretório angular-quickstart/server e cole o seguinte código:

ângulo-quickstart/ servidor/ servidor.ts
import express from "express";
import cors from "cors";
import restaurants from "./routes/restaurant.js";
const PORT = process.env.PORT || 5050;
const app = express();
app.use(cors());
app.use(express.json());
app.use("/restaurant", restaurants);
// start the Express server
app.listen(PORT, () => {
console.log(`Server listening on port ${PORT}`);
});
2

No diretório server, crie um arquivo .env e cole o seguinte código:

MONGODB_URI=<connection string>
PORT=5050

Substitua o placeholder <connection string> pela string de conexão que você salvou em uma etapa anterior.

3

No diretório server, crie um subdiretório denominado db. Adicione um novo arquivo denominado connection.ts a este subdiretório e cole o seguinte código:

ângulo-quickstart/ servidor/db/connection.ts
import "dotenv/config";
import { MongoClient, Db } from "mongodb";
const uri = process.env.MONGODB_URI || "";
const client = new MongoClient(uri);
try {
// Connects the client to the server
await client.connect();
// Sends a ping to confirm a successful connection
await client.db("admin").command({ ping: 1 });
console.log(
"Pinged your deployment. You successfully connected to MongoDB!"
);
} catch(err) {
console.error(err);
}
const db: Db = client.db("sample_restaurants");
export default db;

Esse arquivo se conecta à sua implantação do MongoDB, acessa o banco de dados sample_restaurants e testa a conexão com o banco de dados.

4

No diretório server, crie um subdiretório denominado routes. Crie um arquivo denominado restaurant.ts neste subdiretório e cole o seguinte código:

ângulo-quickstart/ servidor/routes/restaurant.ts
import express, { Request, Response } from "express";
import db from "../db/connection.js";
// Creates an instance of the Express router, used to define our routes
const router = express.Router();
// Gets a list of all the restaurants
router.get("/", async (req: Request, res: Response) => {
let collection = db.collection("restaurants");
let results = await collection.find({}).toArray();
res.send(results).status(200);
});
// Lists restaurants that match the query filter
router.get("/browse", async (req: Request, res: Response) => {
try {
let collection = db.collection("restaurants");
let query = {
borough: "Queens",
name: { $regex: "Moon", $options: "i" },
};
let results = await collection.find(query).toArray();
res.send(results).status(200);
} catch (err) {
console.error(err);
res.status(500).send("Error browsing restaurants");
}
});
export default router;

Este arquivo acessa a coleção restaurants no banco de dados do sample_restaurants e define os seguintes pontos de extremidade do GET:

  • /: recupera todos os restaurantes da coleção de amostras

  • /browse: recupera restaurantes que correspondem aos critérios de query, que aplica um filtro para restaurantes em Queens que contêm a palavra "Moon" no nome

Depois de configurar o backend do aplicativo, siga as etapas nesta seção para configurar o Angular e adicionar os componentes de frontend.

1

Navegue até o diretório angular-quickstart e execute o seguinte comando para criar um novo aplicativo Angular:

ng new client

Este comando solicita que você responda a uma série de perguntas de configuração. Para cada pergunta, escolha as seguintes respostas:

  • Qual sistema de folha de estilo você gostaria de usar? Selecionar CSS do Tailwind

  • Deseja ativar a renderização do lado do servidor (SSR) e a geração de sites estáticos (SSG/Prerendering)? Insira N

  • Quais ferramentas de IA você deseja configurar com as práticas recomendadas do Angular? Selecione as ferramentas de sua escolha

Após executar o comando, seu projeto tem um diretório client que contém andaime front-end. O comando também configura seu projeto para usar o TailwindCSS, uma framework para formatação da IU.

2

Execute os seguintes comandos a partir do diretório raiz do seu projeto para instalar o Zone.js:

cd client
npm install zone.js

Seu aplicativo usa a biblioteca zona.js para rastrear alterações e atualizar automaticamente a IU.

3

No diretório client, execute o seguinte comando para gerar um serviço que lida com chamadas de API para seu backend:

ng generate service restaurant

Navegue até o arquivo client/src/app/restaurant.ts e substitua o conteúdo pelo seguinte código:

angular-quickstart/ cliente/src/aplicativo/restaurant.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
export interface Restaurant {
_id: string;
name: string;
borough: string;
cuisine: string;
}
@Injectable({
providedIn: 'root'
})
export class RestaurantService {
private apiUrl = 'http://localhost:5050/restaurant';
constructor(private http: HttpClient) {}
getAllRestaurants(): Observable<Restaurant[]> {
return this.http.get<Restaurant[]>(this.apiUrl);
}
getFilteredRestaurants(): Observable<Restaurant[]> {
return this.http.get<Restaurant[]>(`${this.apiUrl}/browse`);
}
}

Este serviço define métodos para buscar dados de restaurantes de sua API Express.

4

Navegue até o arquivo client/src/app/app.routes.ts e substitua o conteúdo pelo seguinte código:

ângulo-quickstart/ cliente/src/app/app.routes.ts
import { Routes } from '@angular/router';
import { RestaurantListComponent } from './restaurant-list/restaurant-list';
export const routes: Routes = [
{ path: '', component: RestaurantListComponent },
{ path: 'browse', component: RestaurantListComponent }
];

Este arquivo configura o roteamento do lado do cliente e define as seguintes rotas:

  • /: exibe todos os restaurantes do ponto de extremidade da API /restaurant/

  • /browse: exibe restaurantes filtrados do ponto de extremidade da API /restaurant/browse

5

Navegue até o arquivo client/src/app/app.config.ts e substitua o conteúdo pelo seguinte código:

ângulo-quickstart/ aplicativo/src/aplicativo/aplicativo.config.ts
import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
import { provideRouter } from '@angular/router';
import { provideHttpClient } from '@angular/common/http';
import { routes } from './app.routes';
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true }),
provideRouter(routes),
provideHttpClient()
]
};

Esta configuração ativa a funcionalidade do cliente HTTP para fazer solicitações de API.

6

Execute o seguinte comando a partir do diretório client para gerar um componente para exibir restaurantes:

ng generate component restaurant-list

Navegue até o arquivo client/src/app/restaurant-list/restaurant-list.ts e substitua o conteúdo pelo seguinte código:

angular-quickstart/cliente/src/aplicativo/restaurant-list/restaurant-list.ts
import { Component, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Router } from '@angular/router';
import { RestaurantService, Restaurant } from '../restaurant';
@Component({
selector: 'app-restaurant-list',
standalone: true,
imports: [CommonModule],
templateUrl: './restaurant-list.html',
styleUrl: './restaurant-list.css'
})
export class RestaurantListComponent implements OnInit {
restaurants: Restaurant[] = [];
loading = true;
error = '';
constructor(
private restaurantService: RestaurantService,
public router: Router
) {}
ngOnInit(): void {
this.loadRestaurants();
}
loadRestaurants(): void {
const isFiltered = this.router.url === '/browse';
const observable = isFiltered
? this.restaurantService.getFilteredRestaurants()
: this.restaurantService.getAllRestaurants();
observable.subscribe({
next: (data) => {
this.restaurants = data;
this.loading = false;
},
error: (err) => {
this.error = 'Failed to load restaurants';
this.loading = false;
console.error('Error loading restaurants:', err);
}
});
}
}

Em seguida, navegue até o arquivo client/src/app/restaurant-list/restaurant-list.html e substitua o conteúdo pelo seguinte código:

ângulo-quickstart/ aplicativo/src/app/restaurant-list/restaurant-list.html
<div *ngIf="loading" class="text-center py-8">
<p class="text-gray-600">Loading restaurants...</p>
</div>
<div *ngIf="error" class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded">
{{ error }}
</div>
<div *ngIf="!loading && !error">
<h3 class="text-lg font-semibold p-4">
{{ router.url === '/browse' ? 'Filtered Restaurants (Queens, containing "Moon")' : 'All Restaurants' }}
</h3>
<div class="border rounded-lg overflow-hidden">
<div class="relative w-full overflow-auto">
<table class="w-full caption-bottom text-sm">
<thead class="[&_tr]:border-b">
<tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted">
<th class="h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0">
Name
</th>
<th class="h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0">
Borough
</th>
<th class="h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0">
Cuisine
</th>
</tr>
</thead>
<tbody class="[&_tr:last-child]:border-0">
@for (restaurant of restaurants; track restaurant._id) {
<tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted">
<td class="p-4 align-middle [&:has([role=checkbox])]:pr-0">
{{ restaurant.name }}
</td>
<td class="p-4 align-middle [&:has([role=checkbox])]:pr-0">
{{ restaurant.borough }}
</td>
<td class="p-4 align-middle [&:has([role=checkbox])]:pr-0">
{{ restaurant.cuisine }}
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>

Este componente recupera e exibe as informações do restaurante com base na rota atual.

7

Navegue até o arquivo client/src/app/app.ts e substitua o conteúdo pelo seguinte código:

ângulo-quickstart/ cliente/src/aplicativo/aplicativo.ts
import { Component } from '@angular/core';
import { RouterOutlet, RouterLink, RouterLinkActive } from '@angular/router';
@Component({
selector: 'app-root',
standalone: true,
imports: [RouterOutlet, RouterLink, RouterLinkActive],
templateUrl: './app.html',
styleUrl: './app.css'
})
export class AppComponent {
title = 'Restaurant Browser';
}

Em seguida, navegue até o arquivo client/src/app/app.html e substitua o conteúdo pelo seguinte código:

angular-quickstart/client/src/app/app.html
<div class="w-full p-6">
<nav class="flex justify-between items-center mb-6">
<a routerLink="/">
<img
alt="MongoDB logo"
class="h-10 inline"
src="https://d3cy9zhslanhfa.cloudfront.net/media/3800C044-6298-4575-A05D5C6B7623EE37/4B45D0EC-3482-4759-82DA37D8EA07D229/webimage-8A27671A-8A53-45DC-89D7BF8537F15A0D.png"
/>
</a>
<div class="flex gap-4">
<a routerLink="/" routerLinkActive="font-bold" [routerLinkActiveOptions]="{exact: true}" class="text-blue-600 hover:underline">
All Restaurants
</a>
<a routerLink="/browse" routerLinkActive="font-bold" class="text-blue-600 hover:underline">
Filtered Restaurants
</a>
</div>
</nav>
<router-outlet></router-outlet>
</div>

Este é o principal componente do aplicativo que inclui navegação e renderiza os componentes secundários apropriados com base na rota atual.

8

Navegue até o arquivo client/src/main.ts e substitua o conteúdo pelo seguinte código:

ângulo-quickstart/ cliente/src/main.ts
import 'zone.js';
import { bootstrapApplication } from '@angular/platform-browser';
import { appConfig } from './app/app.config';
import { AppComponent } from './app/app';
bootstrapApplication(AppComponent, appConfig)
.catch((err) => console.error(err));

Este arquivo atua como o ponto de entrada para seu aplicativo, aplicando e renderizando sua configuração.

Por fim, siga as etapas nesta seção para executar seu aplicativo e visualizar os dados renderizados do restaurante.

1

No diretório server, execute o seguinte comando para iniciar o servidor:

npx tsx server.ts

Se bem-sucedido, este comando gera as seguintes informações:

Pinged your deployment. You successfully connected to MongoDB!
Server listening on port 5050
2

Em uma janela de terminal separada, navegue até o diretório client. Execute o seguinte comando para iniciar o frontend do Angular:

ng serve

Se bem-sucedido, este comando gera as seguintes informações:

Application bundle generation complete.
Watch mode enabled. Watching for file changes...
NOTE: Raw file sizes do not reflect development server per-request transformations.
➜ Local: http://localhost:4200/
➜ press h + enter to show help

Seu aplicativo Angular faz solicitações HTTP da porta 4200 para a porta 5050 para recuperar dados.

3

Abra o http://localhost:4200/ URL. A página de destino inicial exibe uma lista de todos os restaurantes na sample_restaurants.restaurants coleção:

A página de destino que exibe todos os restaurantes

Em seguida, clique no link Filtered Restaurants na barra de navegação para visualizar os restaurantes que correspondem à query de campo name e borough:

A página web que exibe os restaurantes correspondentes

Parabéns por concluir o tutorial de início rápido!

Depois de concluir essas etapas, você tem um aplicativo web Angular que se conecta à implantação do MongoDB, executa uma query em dados de restaurante de amostra e renderiza os resultados em um website hospedado localmente.

Para saber mais sobre Angular, MongoDB e a pilha MEAN, consulte os seguintes recursos: