J'ai une agrégation que les groupes à une date et crée une somme.MongoDB globale à l'aide distincte
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
}
})
La sortie est
"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
jusqu'à présent si bon. Ce que je dois faire maintenant est de garder ceci, mais aussi d'ajouter un critère distinct (pour l'argument je veux utiliser AccountId). Le me donnerait le compte des dates groupées en utilisant seulement AccountId distinct. Est-ce que même distinct est possible dans le cadre d'agrégation?
se référer à la dernière ligne ici qui mappe de SQL distinct à l'opération mongo équivalente: http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/ – Jayz
Ceci ne fonctionne certainement pas puisque le premier groupe se débarrasser du champ notificationDate. – zsong
yup, désolé de négliger cela. alors ajoutez notificationDate au premier groupe. voir la réponse éditée. – Jayz