MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB $ fino ad oggi

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.