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

MongoDB聚合管道与$Lookup查询问题求助及修正指导

MongoDB Aggregate 查询实现指南(Accessories数据库)

Query1:查找从未售出的产品

直接通过$lookup关联售出记录,过滤无售出记录的产品:

db.Products.aggregate([
  {
    $lookup: {
      from: "ProductSold",
      localField: "_id",
      foreignField: "productId",
      as: "soldRecords"
    }
  },
  {
    $match: {
      soldRecords: { $size: 0 }
    }
  },
  {
    $project: {
      _id: 1,
      productName: 1
      // 按需保留其他产品字段
    }
  }
])

注意:如果之前结果异常,先检查关联字段是否匹配(比如是否误用productName而非_id),确认ProductSold中productId类型和Products._id一致。

Query2:未售产品库存统计排序

基于未售产品筛选结果,关联库存并统计排序:

db.Products.aggregate([
  // 先筛未售产品
  {
    $lookup: {
      from: "ProductSold",
      localField: "_id",
      foreignField: "productId",
      as: "soldRecords"
    }
  },
  {
    $match: {
      soldRecords: { $size: 0 }
    }
  },
  // 关联库存数据
  {
    $lookup: {
      from: "ProductStock",
      localField: "_id",
      foreignField: "productId",
      as: "stockInfo"
    }
  },
  // 计算总库存(兼容无库存的产品)
  {
    $addFields: {
      totalStock: { $sum: { $ifNull: ["$stockInfo.stockQuantity", 0] } }
    }
  },
  // 按库存降序排序
  {
    $sort: { totalStock: -1 }
  },
  {
    $project: {
      _id: 1,
      productName: 1,
      totalStock: 1
    }
  }
])

注意:如果结果条数不对,检查ProductStock中是否存在未关联到产品的无效数据,或者是否漏处理无库存的未售产品。

Query3:去重国家-仓库组合

从库存集合中提取唯一的国家-仓库配对:

db.ProductStock.aggregate([
  {
    $group: {
      _id: {
        country: "$country",
        warehouse: "$warehouse"
      }
    }
  },
  {
    $project: {
      _id: 0,
      country: "$_id.country",
      warehouse: "$_id.warehouse"
    }
  }
])

通过$group按组合字段聚合自动去重,最后整理输出格式。

Query4:各仓库产品数量统计

统计每个仓库的产品种类数(非库存总量):

db.ProductStock.aggregate([
  {
    $group: {
      _id: {
        warehouse: "$warehouse",
        country: "$country" // 不需要按国家区分可删除此行
      },
      uniqueProducts: { $addToSet: "$productId" }
    }
  },
  {
    $addFields: {
      productCount: { $size: "$uniqueProducts" }
    }
  },
  {
    $project: {
      _id: 0,
      warehouse: "$_id.warehouse",
      country: "$_id.country", // 对应上面的删除操作调整
      productCount: 1
    }
  },
  {
    $sort: { productCount: -1 }
  }
])

如果要统计库存总量,把$addToSet替换为$sum: "$stockQuantity"即可。

内容的提问来源于stack exchange,提问作者mobly elliot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:22:35