Visão Geral do Projeto
Status do Desafio
Progresso: 6/6 etapas completas
Estruturas de dados pandas com informações de carros e montadoras implementadas
Conexão local e remota configurada com tratamento de erros robusto
Dados persistidos nas collections 'carros' e 'montadoras' do MongoDB
Pipeline MongoDB desenvolvido para relacionar collections
Resultado final organizado por país de origem das montadoras
Collections e resultado da agregação exportados para arquivos JSON
Soluções Implementadas
Multi-plataforma
Scripts otimizados para Windows e Linux com documentação específica
Interface Amigável
Feedback visual colorido e logs detalhados durante a execução
Setup Automático
Configuração automática do ambiente MongoDB e collections
Servidor 192.168.22.111
Configuração prática para conexão com servidor remoto específico
Autenticação Segura
Suporte completo a credenciais, SSL/TLS e validação de conexão
Configuração Flexível
Gerenciamento via arquivo .env ou configuração direta no código
Ambiente Isolado
MongoDB e Mongo Express executando em containers Docker
Deploy Rápido
Ambiente completo funcionando com um único comando
Desenvolvimento
Configuração ideal para testes e desenvolvimento local
Estrutura dos Dados
DataFrame Carros
| Carro | Cor | Montadora |
|---|---|---|
| Onix | Prata | Chevrolet |
| Polo | Branco | Volkswagen |
| Sandero | Prata | Renault |
| Fiesta | Vermelho | Ford |
| City | Preto | Honda |
DataFrame Montadoras
| Montadora | País |
|---|---|
| Chevrolet | EUA |
| Volkswagen | Alemanha |
| Renault | França |
| Ford | EUA |
| Honda | Japão |
Implementação Python
import pandas as pd
# DataFrame Carros
carros_data = {
'carro': ['Onix', 'Polo', 'Sandero', 'Fiesta', 'City'],
'cor': ['Prata', 'Branco', 'Prata', 'Vermelho', 'Preto'],
'montadora': ['Chevrolet', 'Volkswagen', 'Renault', 'Ford', 'Honda']
}
df_carros = pd.DataFrame(carros_data)
# DataFrame Montadoras
montadoras_data = {
'montadora': ['Chevrolet', 'Volkswagen', 'Renault', 'Ford', 'Honda'],
'pais': ['EUA', 'Alemanha', 'França', 'EUA', 'Japão']
}
df_montadoras = pd.DataFrame(montadoras_data)
Instalação Local
Configuração Windows
Opção A - Chocolatey:
choco install mongodb
Opção B - Download Manual:
Baixar em: MongoDB Community Server
cd Case-Engenheiro-dados python -m venv .venv .venv\Scripts\Activate.ps1 pip install -r requirements.txt
net start MongoDB
python scripts/main_local.py
Configuração Linux
# Ubuntu/Debian sudo apt-get update sudo apt-get install -y mongodb-org # Iniciar serviço sudo systemctl start mongod sudo systemctl enable mongod
python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt
python scripts/main_local.py
Ambiente Docker
docker-compose -f docker/docker-compose.yml up -d
python scripts/main_local.py
http://localhost:8081
Conexão Remota
Configuração do Servidor
# Editar configuração sudo nano /etc/mongod.conf # Permitir conexões externas net: port: 27017 bindIp: 0.0.0.0 # Reiniciar serviço sudo systemctl restart mongod
# Ubuntu sudo ufw allow 27017/tcp # CentOS sudo firewall-cmd --permanent --add-port=27017/tcp sudo firewall-cmd --reload
Configuração do Cliente
MONGO_HOST=192.168.22.111 MONGO_PORT=27017 MONGO_DATABASE=dataops_challenge MONGO_USERNAME=usuario MONGO_PASSWORD=senha
python scripts/main_remote.py
Execução dos Scripts
Script Local
Funcionalidades do script local:
- Conecta ao MongoDB local (localhost:27017)
- Cria database 'dataops_challenge' automaticamente
- Insere dados dos DataFrames nas collections
- Executa pipeline de agregação MongoDB
- Exporta resultados para arquivos JSON
- Fornece logs detalhados de cada operação
Script Remoto
Funcionalidades adicionais do script remoto:
- Validação completa de credenciais
- Teste de conectividade de rede
- Relatório de status do servidor
- Suporte a conexões SSL/TLS
- Tratamento robusto de erros de rede
Arquivos Gerados
carros.json
Collection completa de carros exportada do MongoDB
montadoras.json
Collection de montadoras com dados de países
aggregation_result.json
Resultado final da agregação por país
Resultados da Agregação
Pipeline de Agregação
db.carros.aggregate([
{
$lookup: {
from: "montadoras",
localField: "montadora",
foreignField: "montadora",
as: "montadora_info"
}
},
{
$unwind: "$montadora_info"
},
{
$group: {
_id: "$montadora_info.pais",
carros: {
$push: {
carro: "$carro",
cor: "$cor",
montadora: "$montadora"
}
}
}
},
{
$sort: { _id: 1 }
}
]);
Resultado Final por País
| País | Quantidade | Carros |
|---|---|---|
| Alemanha | 1 | Polo (Volkswagen) |
| EUA | 2 | Onix (Chevrolet), Fiesta (Ford) |
| França | 1 | Sandero (Renault) |
| Japão | 1 | City (Honda) |
Resolução de Problemas
Problemas com MongoDB
Solução Windows:
# Verificar logs Get-Content "C:\data\log\mongodb.log" -Tail 20 # Reiniciar serviço net stop MongoDB net start MongoDB
Solução Linux:
# Verificar status sudo systemctl status mongod # Reiniciar serviço sudo systemctl restart mongod # Visualizar logs sudo journalctl -u mongod -f
Problemas com Python
# Ativar ambiente virtual # Windows .venv\Scripts\Activate.ps1 # Linux/Mac source .venv/bin/activate # Instalar dependências pip install -r requirements.txt
python -c "import pandas; print('Pandas funcionando!')"
Problemas de Conectividade
Testar conectividade:
# Ping para o servidor ping 192.168.22.111 # Testar porta específica telnet 192.168.22.111 27017 # Verificar firewall local sudo ufw status