ho alcuni documenti in Mongo che sembra qualcosa di simile:MongoDB aggregato nell'ambito di raggruppamento quotidiana
{
_id : ObjectId("..."),
"make" : "Nissan",
..
},
{
_id : ObjectId("..."),
"make" : "Nissan",
"saleDate" : ISODate("2013-04-10T12:39:50.676Z"),
..
}
Idealmente, mi piacerebbe essere in grado di contare, per marca, il numero di veicoli venduti al giorno. Vorrei quindi vedere oggi o una finestra come oggi negli ultimi sette giorni.
sono stato in grado di realizzare la visione al giorno con un po 'di codice brutto
db.inventory.aggregate(
{ $match : { "saleDate" : { $gte: ISODate("2013-04-10T00:00:00.000Z"), $lt: ISODate("2013-04-11T00:00:00.000Z") } } } ,
{ $group : { _id : { make : "$make", saleDayOfMonth : { $dayOfMonth : "$saleDate" } }, cnt : { $sum : 1 } } }
)
Che poi produce i risultati
{
"result" : [
{
"_id" : {
"make" : "Nissan",
"saleDayOfMonth" : 10
},
"cnt" : 2
},
{
"_id" : {
"make" : "Toyota",
"saleDayOfMonth" : 10
},
"cnt" : 4
},
],
"ok" : 1
}
così che è ok, ma io preferirei di gran lunga non dover cambiare i due valori datetime nella query. Quindi, come ho detto sopra, mi piacerebbe essere in grado di eseguire questa query (di nuovo, senza doverla modificare ogni volta) e vedere gli stessi risultati abbinati per giorno nell'ultima settimana.
Oh, e qui sono i dati di esempio ho usato per la query
db.inventory.save({"make" : "Nissan","saleDate" : ISODate("2013-04-10T12:39:50.676Z")});
db.inventory.save({"make" : "Nissan"});
db.inventory.save({"make" : "Nissan","saleDate" : ISODate("2013-04-10T11:39:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-09T11:39:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:38:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:37:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:36:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:35:50.676Z")});
Grazie in anticipo, Kevin
Qual è il significato di 676Z? –
Solo un aggiornamento (dal 2017, wow questa domanda è vecchia ..), ho cambiato la risposta accettata mentre il framework Mongo si è evoluto per risolvere questo molto più facile. Nondimeno props ad Asya per la sua risposta originale. @AboozarRajabi, "676Z" è una parte facoltativa di un formato di tempo [ISO 8601] (https://en.wikipedia.org/wiki/ISO_8601), in questo caso "676Z" rappresenta due parti del 2013-04-10T11: 35: 50.676Z, il primo 676 è millisecondi e "Z" è una scorciatoia per indicare il fuso orario UTC. – Kevin