1

我有一个按日期分组并创建总和的聚合。

db.InboundWorkItems.aggregate({
    $match: {
        notificationDate: {
            $gte: ISODate("2013-07-18T04:00:00Z")
        },
        dropType: 'drop'
    }
}, {
    $group: {
        _id: {
            notificationDate: "$notificationDate"
        },
        nd: {
            $first: "$notificationDate"
        },
        count: {
            $sum: 1
        }
    }
}, {
    $sort: {
        nd: 1
    }
})

输出是

"result" : [
    {
        "_id" : {
            "notificationDate" : ISODate("2013-07-18T04:00:00Z")
        },
        "nd" : ISODate("2013-07-18T04:00:00Z"),
        "count" : 484
    },
    {
        "_id" : {
            "notificationDate" : ISODate("2013-07-19T04:00:00Z")
        },
        "nd" : ISODate("2013-07-19T04:00:00Z"),
        "count" : 490
    },
    {
        "_id" : {
            "notificationDate" : ISODate("2013-07-20T04:00:00Z")
        },
        "nd" : ISODate("2013-07-20T04:00:00Z"),
        "count" : 174
    },
    {
        "_id" : {
            "notificationDate" : ISODate("2013-07-21T04:00:00Z")
        },
        "nd" : ISODate("2013-07-21T04:00:00Z"),
        "count" : 6
    },
    {
        "_id" : {
            "notificationDate" : ISODate("2013-07-22T04:00:00Z")
        },
        "nd" : ISODate("2013-07-22T04:00:00Z"),
        "count" : 339
    },
    {
        "_id" : {
            "notificationDate" : ISODate("2013-07-23T04:00:00Z")
        },
        "nd" : ISODate("2013-07-23T04:00:00Z"),
        "count" : 394
    },
    {
        "_id" : {
            "notificationDate" : ISODate("2013-07-24T04:00:00Z")
        },
        "nd" : ISODate("2013-07-24T04:00:00Z"),
        "count" : 17
    }
],
"ok" : 1

到目前为止,一切都很好。我现在需要做的是保持这一点,但还要在标准中添加一个不同的(为了论证,我想使用 AccountId)。这将只使用不同的 AccountId 为我提供分组日期的计数。在聚合框架内甚至可以区分吗?

4

3 回答 3

0
db.InboundWorkItems.aggregate({
    $match: {
        notificationDate: {
            $gte: ISODate("2013-07-18T04:00:00Z")
        },
        dropType: 'drop'
    }
}, {
    $group: {
        _id: "$AccountId",
        notificationDate: {
            $max: "$notificationDate"
        },
        dropType: {
            $max: "$dropType"
        }
    }

}, {
    $group: {
        _id: {
            notificationDate: "$notificationDate"
        },
        nd: {
            $first: "$notificationDate"
        },
        count: {
            $sum: 1
        }
    }
}, {
    $sort: {
        nd: 1
    }
})
于 2013-07-25T02:07:11.843 回答
0

我认为您实际上可能正在寻找一个小组(英语有点混乱),如下所示:

db.InboundWorkItems.aggregate({
    $match: {
        notificationDate: {
            $gte: ISODate("2013-07-18T04:00:00Z")
        },
        dropType: 'drop'
    }
}, {
    $group: {
        _id: {
            notificationDate: "$notificationDate", accountId: '$accountId'
        },
        nd: {
            $first: "$notificationDate"
        },
        count: {
            $sum: 1
        }
    }
}, {
    $sort: {
        nd: 1
    }
})

我在 $group 中添加复合 _id 是因为:

这将只使用不同的 AccountId 为我提供分组日期的计数。

这让我认为您希望按帐户 ID 分组日期计数。

于 2013-07-25T07:26:01.543 回答
0

您可以在管道中使用两个组命令,第一个按 accoundId 分组,然后是执行常规操作的第二组。像这样的东西:

db.InboundWorkItems.aggregate( 
  {$match: {notificationDate: {$gte: ISODate("2013-07-18T04:00:00Z")}, dropType:'drop' }}, 
  {$group: {_id:"accountId",notificationDate:"$notificationDate"}},
  {$group: {_id:1, nd: {$first:"$notificationDate"}, count:{$sum:1} }}, 
  {$sort:{nd:1}}  )
于 2013-07-25T01:44:36.867 回答