首页 > 解决方案 > 在 Mongo 中为字段获取不同的值

问题描述

我有一个数据库集合,这是它的文档结构。

{
_id: ObjectId("xxxxddsdsfdfdfdf")
category: electronics
sku: 10902
}

{
_id: ObjectId("dfdfdgfsdfdsgsf")
category: apparels
sku: 90345
}

{
_id: ObjectId("sdfdfdsggfgsgsdgsgsf")
category: electronics
sku: 10345
}

{
_id: ObjectId("dfndsnfkjdfdfsdnfsdf")
category: electronics
sku: 43435
}

我正在尝试查找每个类别的 SKU 总数。它应该消除重复并保持不同的值。例如,electronics: 3, apparels: 1

我写了一个查询,但它给了我一个跨类别的 SKU 总数,这根本不是预期的。

db.ecomm_sku_count.aggregate([
    {
        $group: {
            _id: {
                category: '$category',
                sku_count: '$sku'
            },
            total_sku: {
                $sum: 1
            }
        }
    },
    {
        $count: "total_sku_units"
    }
])

#output= [ { total_sku_units: 4 } ]

预期的输出必须有点像这样。

[
  { _id: { category: 'electronics', sku_count: 3 } },
  { _id: { category: 'apparels', sku_count: 1} }
]

我试图找到每个类别的不同 SKU 值。

我是 mongo 聚合框架的初学者。如果问题是菜鸟类型,请原谅我。

标签: mongodbmongodb-queryaggregation-framework

解决方案


我认为下面的代码是你正在寻找的:

db.collection.aggregate([
  {
    "$group": {
      "_id": {
        "category": "$category",
        
      },
      "total_sku": {
        "$addToSet": "$sku"
      }
    },
  },
  {
    "$project": {
      "total_sku": {
        "$size": "$total_sku"
      }
    },
  },
])

Mongo Playground 示例执行


推荐阅读