SQL JOIN → MongoDB $lookup
O workspace Tools → SQL Query traduz SQL INNER JOIN e LEFT JOIN para pipelines MongoDB $lookup + $unwind automaticamente. Sem rewrite manual.
O que ele faz
Quando você escreve SQL com uma ou mais cláusulas JOIN, NoSqlStudio emite o pipeline de aggregation equivalente: cada JOIN vira um stage $lookup seguido de $unwind. Referências de coluna qualificadas (u.name, o.userId) são reescritas corretamente — campos da collection principal dropam o qualifier; campos das collections joinadas preservam o alias como path de sub-documento.
Como abrir
- Pressione Ctrl+Alt+Q (ou abra Tools → SQL Query do menu).
- Digite ou cole seu SQL no painel da esquerda.
- Clique em "Convert" — a aggregation MongoDB aparece à direita, pronta para copiar no mongosh.
INNER JOIN — match obrigatório
INNER JOIN dropa documentos que não têm match do lado joinado (preserveNullAndEmptyArrays: false). Exemplo:
SELECT u.name, COUNT(o._id) AS orderCount
FROM users u
INNER JOIN orders o ON u._id = o.userId
GROUP BY u.nameTraduz para:
db.users.aggregate([
{ $lookup: { from: 'orders', localField: '_id', foreignField: 'userId', as: 'o' } },
{ $unwind: { path: '$o', preserveNullAndEmptyArrays: false } },
{ $group: { _id: '$name', orderCount: { $sum: { $cond: [{ $ne: ['$o._id', null] }, 1, 0] } } } },
{ $project: { _id: 0, name: '$_id', orderCount: 1 } }
])LEFT JOIN — match opcional
LEFT JOIN mantém documentos sem match do lado joinado (preserveNullAndEmptyArrays: true). Útil quando você quer todos os usuários mais suas orders se tiverem alguma:
SELECT u.name, u.email, o.total, o.createdAt
FROM users u
LEFT JOIN orders o ON u._id = o.userId
WHERE u.tier = 'enterprise'JOINs encadeados
Você pode encadear múltiplos JOINs. O localField do N-ésimo lookup pode referenciar campos de qualquer alias previamente joinado:
SELECT u.name, o.total, p.title
FROM users u
INNER JOIN orders o ON u._id = o.userId
INNER JOIN products p ON o.productId = p._idLimitações (v1)
- RIGHT JOIN / FULL OUTER JOIN / CROSS JOIN: não suportados. $lookup não tem equivalente nativo. Inverta os lados (transforme RIGHT JOIN num LEFT JOIN da query invertida) ou escreva o pipeline à mão no mongosh.
- ON multi-condição (AND/OR): não suportado. Use a forma mais simples com uma única condição de equi-join, ou reescreva usando a forma de $lookup pipeline no mongosh.
- USING (col): não suportado. Use ON a.col = b.col explícito.
- Erros amigáveis: quando um dos casos acima aparece, o tradutor retorna uma mensagem específica — não o erro críptico de parser que você teria com um tradutor genérico.