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 に答える