【问题标题】:How to count all unique values In MONGODB? [duplicate]如何计算 MONGODB 中的所有唯一值? [复制]
【发布时间】:2018-02-23 12:14:05
【问题描述】:
{

    {
    "date": "2017-09-04",
    "description": "DD from my employer1",
    "amount": 1000.33
    },
    {
    "date": "2017-09-06",
    "description": "DD from my employer1",
    "amount": 1000.34
    },
    {
    "date": "2017-09-06",
    "description": "DD from my employer1",
    "amount": 1000.35
    },
    {
    "date": "2017-09-07",
    "description": "DD from employer1",
    "amount": 5000.00
    },
    {
    "date": "2017-09-08",
    "description": "DD from my employer1",
    "amount": 2000.33
    },
    {
    "date": "2017-09-09",
    "description": "DD from my employer1",
    "amount": 2000.33
    },
    {
    "date": "2017-09-10",
    "description": "DD from my employer1",
    "amount": 2000.33
    }

}

我在上面有这组对象,我正在尝试计算唯一日期的数量。有 7 个带有日期字段的对象,但正如您所见,2017-09-06 出现了两次,这意味着总共只有 6 天。我正在尝试对我的日期进行分组,但无法让 mongo 只计算一次日期并将多次出现的日期视为一个。

这个我试过了……

{
    {
        "$group": {
            "_id": {
                "description": "$description",
                "date": "$date"   
            },
            "count": {
                "$sum": 1
            }
        }
    }
}

【问题讨论】:

  • 你试过什么?遍历每个对象,跟踪关联数组中的日期。

标签: mongodb date


【解决方案1】:

有聚合:

db.collection.aggregate(
    // Pipeline
    [
        {
            $group: {
                _id: "$date"
            }
        },
        {
            $group: {
               _id:1, 
               count: {$sum : 1 }
            }
        },
    ]
)

【讨论】:

  • 这看起来和我上面做的很像?
  • 不,这不是一回事。第一个流水线操作,按数据分组,第二个操作计算结果。
  • 这会将双日期计算为 1(即:2017-09-06)。所以我要找的计数是 6,因为 2017-09-06 出现了两次。
【解决方案2】:

使用 distinct 获取唯一值

db.getCollection('books').distinct('date')

如果你想要唯一值的总数

db.getCollection('books').distinct('date').length

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    相关资源
    最近更新 更多