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