MongoDB:如何查询products中无对应partnerId的companies名称?
问题解决方法
一、修复Aggregate查询
你当前的lookup查询未做结果过滤,且字段匹配逻辑错误(题目明确两个集合共用partnerId字段,而非partner对应_id)。正确的聚合查询需在lookup后添加$match筛选无匹配的文档,再用$project仅返回name字段:
db.companies.aggregate([ { $lookup: { from: "products", localField: "partnerId", // 匹配companies集合的partnerId字段 foreignField: "partnerId", // 匹配products集合的partnerId字段 as: "matched_products" } }, { $match: { matched_products: { $size: 0 } // 筛选无对应products的文档 } }, { $project: { name: 1, _id: 0 // 不需要返回_id可添加此配置 } } ])
二、修复NoSQLBooster的SQL查询
你的SQL查询报错是因为子查询缺少闭合括号,同时需明确字段所属集合避免歧义:
mb.runSQLQuery(` SELECT name FROM companies WHERE NOT EXISTS ( SELECT * FROM products WHERE products.partnerId = companies.partnerId ) `);
补充说明
- 聚合查询中
$size: 0用于判断lookup返回的数组为空,即无匹配的products文档 - SQL查询必须保证子查询括号完整,字段关联时明确所属集合可避免潜在的字段名冲突
内容的提问来源于stack exchange,提问作者Muntashir Are Rahi
相关产品推荐
相关产品推荐

