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

如何检测MongoDB集合中同一产品是否存在多个价格值?

问题

我的集合结构如下:

[
  {
    "_id": "some value",
    "product/productId": "some value",
    "product/title": "some value",
    "product/price": "unknown"
  },
  {
    "_id": "some value",
    "product/productId": "some value",
    "product/title": "some value",
    "product/price": "12.57"
  }
]

需求:检测是否存在同一产品(按product/productId区分)拥有多个不同的product/price值,其中product/price的取值可为"unknown"或数值型字符串(如"12.75")。请问能否通过MongoDB聚合管道实现该需求,还是需要使用Map-Reduce算法?

解决方案

完全可以用MongoDB聚合管道实现,不需要使用Map-Reduce。以下是具体的聚合管道脚本:

db.yourCollectionName.aggregate([
  // 按productId分组,收集该产品所有不重复的price值
  {
    $group: {
      _id: "$product/productId",
      distinctPrices: { $addToSet: "$product/price" },
      productTitle: { $first: "$product/title" } // 可选,保留产品标题便于查看
    }
  },
  // 筛选出存在多个不同price值的产品
  {
    $match: {
      $expr: { $gt: [ { $size: "$distinctPrices" }, 1 ] }
    }
  },
  // 可选:调整输出格式,让结果更清晰
  {
    $project: {
      productId: "$_id",
      productTitle: 1,
      conflictingPrices: "$distinctPrices",
      _id: 0
    }
  }
])

步骤说明:

  • $group阶段:以product/productId为分组依据,通过$addToSet自动去重,收集该产品下所有不同的price值到distinctPrices数组中。
  • $match阶段:过滤出distinctPrices数组长度大于1的分组,这类分组对应的就是存在多个不同价格的产品。
  • $project阶段:可选步骤,重新命名输出字段、调整结构,让结果可读性更强。

注意事项:

  • 请将脚本中的yourCollectionName替换为你的实际集合名称。
  • 脚本默认将"unknown"和数值型字符串视为不同值,符合需求中的检测逻辑。

内容的提问来源于stack exchange,提问作者duje.je

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:15:30