You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:10:14