【问题标题】:Getting distinct value for a field in Mongo在 Mongo 中为字段获取不同的值
【发布时间】:2021-06-24 02:07:59
【问题描述】:

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

{
_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 聚合框架的初学者。如果问题属于菜鸟类型,请原谅我。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    我认为下面的代码就是你要找的:

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

    Mongo Playground Sample Execution

    【讨论】:

    • 嗨……它也在计算重复项。结果不明显
    • @KrisT 为给您带来的不便深表歉意,我已经更新了答案。检查这是否是您要查找的内容。
    猜你喜欢
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2011-03-26
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    相关资源
    最近更新 更多