In MongoDB, il $toDate
l'operatore di aggregazione converte un valore in una data
$toDate
accetta qualsiasi espressione valida. Se l'espressione non può essere convertita in una data, restituisce un errore. Se l'espressione è null
o mancante, restituisce null
.
Esempio
Supponiamo di avere una raccolta chiamata samples
con il seguente documento:
{ "_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"), "double" : 1613372035500.75, "decimal" : NumberDecimal("1613372035500.75"), "long" : NumberLong("1613372035500"), "string" : "2021-02-15 06:53:55" }
Possiamo utilizzare la query seguente per restituire ciascuno di questi valori come una data.
db.samples.aggregate(
[
{
$project:
{
_id: 0,
"ObjectId": { $toDate: "$_id" },
"double": { $toDate: "$double" },
"decimal": { $toDate: "$decimal" },
"long": { $toDate: "$long" },
"string": { $toDate: "$string" }
}
}
]
).pretty()
Risultato:
{ "ObjectId" : ISODate("2021-01-19T05:33:16Z"), "double" : ISODate("2021-02-15T06:53:55.500Z"), "decimal" : ISODate("2021-02-15T06:53:55.500Z"), "long" : ISODate("2021-02-15T06:53:55.500Z"), "string" : ISODate("2021-02-15T06:53:55Z") }
Come previsto, tutti i campi vengono restituiti con i valori corrispondenti convertiti in valori di data.
Potresti notare che il campo ObjectId restituisce una data diversa dalle altre. Questo perché il _id
il valore del campo riflette la data di creazione del documento, mentre le altre date erano solo date arbitrarie create da me. Ulteriori informazioni sull'ObjectId di seguito.
Tipi di input
Il $toDate
operatore accetta i seguenti tipi di input:
- Doppio
- Decimale
- Lungo
- Stringa (deve essere una stringa di data valida)
- ID oggetto
Maggiori informazioni su questi di seguito.
Tipi numerici
Quando si utilizzano i tipi numerici (Doppio, Decimale e Lungo), $toDate
restituisce una data che corrisponde al numero di millisecondi rappresentato dal valore. Per Double e Decimal, questo è il valore troncato. Il $toDate
operatore interpreta i valori numerici come segue:
- Un valore positivo corrisponde al numero di millisecondi dal 1 gennaio 1970.
- Un valore negativo corrisponde al numero di millisecondi prima del 1 gennaio 1970.
Tipi di stringhe
Quando si utilizza un tipo stringa, la stringa deve essere una stringa di data valida. Ad esempio:
"2021-02-15"
"15 February 2021"
"2021-02-15 06:53:55"
"2021-02-15 06:53:55+1100"
Non puoi utilizzare date incomplete o valori non validi come "Monday"
, "March"
, "2020"
, ecc.
IDOggetto
I valori ObjectId sono valori esadecimali a 12 byte costituiti da:
- Un valore di timestamp di 4 byte, che rappresenta la creazione dell'ObjectId, misurato in secondi dall'epoca di Unix.
- Un 5 byte è un valore casuale
- Un contatore incrementale di 3 byte, inizializzato su un valore casuale.
Il $toDate
l'operatore restituisce la parte del timestamp come Data.