SQL JOIN → MongoDB $lookup
Tools → SQL Query workspace SQL INNER JOIN और LEFT JOIN को स्वचालित रूप से MongoDB $lookup + $unwind pipelines में अनुवादित करता है। कोई manual rewrite आवश्यक नहीं।
यह क्या करता है
जब आप एक या अधिक JOIN clauses के साथ SQL लिखते हैं, NoSqlStudio समतुल्य aggregation pipeline emit करता है: हर JOIN $unwind के बाद $lookup stage बन जाता है। Qualified column references (u.name, o.userId) सही ढंग से rewrite होते हैं — main collection से fields qualifier drop करते हैं; joined collections से fields alias को sub-document path के रूप में preserve करते हैं।
इसे कैसे खोलें
- Ctrl+Alt+Q दबाएँ (या menu से Tools → SQL Query खोलें)।
- अपने SQL को बायीं panel में type या paste करें।
- "Convert" पर क्लिक करें — MongoDB aggregation दाहिनी ओर दिखाई देता है, mongosh में copy करने के लिए तैयार।
INNER JOIN — match आवश्यक
INNER JOIN उन documents को drop करता है जिनका joined side पर कोई match नहीं है (preserveNullAndEmptyArrays: false)। उदाहरण:
SELECT u.name, COUNT(o._id) AS orderCount
FROM users u
INNER JOIN orders o ON u._id = o.userId
GROUP BY u.nameइसमें अनुवादित होता है:
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 वैकल्पिक
LEFT JOIN उन documents को रखता है जिनका joined side पर कोई match नहीं है (preserveNullAndEmptyArrays: true)। उपयोगी जब आप सभी users और उनके orders (यदि कोई हो) चाहते हैं:
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'Chained JOINs
आप कई JOINs chain कर सकते हैं। N-वें lookup का localField किसी भी पहले से joined alias के fields को reference कर सकता है:
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._idसीमाएँ (v1)
- RIGHT JOIN / FULL OUTER JOIN / CROSS JOIN: समर्थित नहीं। $lookup का कोई native समतुल्य नहीं है। Sides को invert करें (RIGHT JOIN को reversed query के LEFT JOIN में बदलें) या mongosh में pipeline को हाथ से लिखें।
- Multi-condition ON (AND/OR): समर्थित नहीं। एक single equi-join condition के साथ सरल form का उपयोग करें, या mongosh में $lookup pipeline form का उपयोग करके rewrite करें।
- USING (col): समर्थित नहीं। स्पष्ट ON a.col = b.col का उपयोग करें।
- Friendly errors: जब उपर्युक्त में से कोई एक प्रकट होता है, translator एक विशिष्ट message लौटाता है — generic translator से मिलने वाला cryptic parser error नहीं।