Ci sono un paio di modi per farlo.
Il primo è con Date Aggregation Operators, che consente di sezionare i valori di "data" nei documenti. Specificamente per "raggruppamento" come intento primario:
db.collection.aggregate([
{ "$group": {
"_id": {
"year": { "$year": "$created_at" },
"dayOfYear": { "$dayOfYear": "$created_at" },
"interval": {
"$subtract": [
{ "$minute": "$created_at" },
{ "$mod": [{ "$minute": "$created_at"}, 15] }
]
}
}},
"count": { "$sum": 1 }
}}
])
Il secondo modo è quello di utilizzare un piccolo trucco di quando un oggetto data viene sottratto (o altra operazione diretta matematica) da un altro oggetto data, il risultato è un valore numerico che rappresenta i millisecondi del timestamp in epoca tra i due oggetti. Quindi usando la data dell'epoca si ottiene la rappresentazione dell'epoca millisecondi. Quindi utilizzare la data matematica per l'intervallo:
db.collection.aggregate([
{ "$group": {
"_id": {
"$subtract": [
{ "$subtract": [ "$current_date", new Date("1970-01-01") ] },
{ "$mod": [
{ "$subtract": [ "$current_date", new Date("1970-01-01") ] },
1000 * 60 * 15
]}
]
},
"count": { "$sum": 1 }
}}
])
Quindi, dipende dal tipo di formato di output desiderato per l'intervallo di raggruppamento. Entrambi rappresentano fondamentalmente la stessa cosa e hanno dati sufficienti per ricostruire come oggetto "data" nel codice.
È possibile inserire qualsiasi altra cosa nella sezione "operatore di raggruppamento" dopo il raggruppamento _id
. Sto semplicemente usando l'esempio di base "contare" al posto di qualsiasi affermazione reale da te stesso su ciò che vuoi veramente fare.
fonte
2014-11-08 06:31:17
È la loro qualcosa nella risposta a condizione che non è chiaro o non si applica alla tua situazione? Notando che non è ancora accettato. –
Non preoccuparti, ha già preso la risposta, perché preoccuparsi di accettare le risposte. – nurgasemetey