sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $toDate

V MongoDB, $toDate agregační operátor převede hodnotu na datum

$toDate přebírá jakýkoli platný výraz. Pokud výraz nelze převést na datum, vrátí chybu. Pokud je výraz null nebo chybí, vrátí null .

Příklad

Předpokládejme, že máme kolekci nazvanou samples s následujícím dokumentem:

{
	"_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"),
	"double" : 1613372035500.75,
	"decimal" : NumberDecimal("1613372035500.75"),
	"long" : NumberLong("1613372035500"),
	"string" : "2021-02-15 06:53:55"
}

Můžeme použít následující dotaz k vrácení každé z těchto hodnot jako Datum.

db.samples.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          "ObjectId": { $toDate: "$_id" },
          "double": { $toDate: "$double" },
          "decimal": { $toDate: "$decimal" },
          "long": { $toDate: "$long" },
          "string": { $toDate: "$string" }
        }
    }
  ]
).pretty()

Výsledek:

{
	"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")
}

Podle očekávání jsou všechna pole vrácena s odpovídajícími hodnotami převedenými na hodnoty Date.

Můžete si všimnout, že pole ObjectId vrací jiné datum než ostatní. Důvodem je _id hodnota pole odráží datum, kdy byl dokument vytvořen, zatímco ostatní data byla pouze libovolná data vytvořená mnou. Více o ObjectId níže.

Typy vstupu

$toDate operátor přijímá následující typy vstupu:

  • Dvojité
  • Desetinné
  • Dlouhé
  • Řetězec (musí jít o platný řetězec data)
  • ObjectId

Více o nich níže.

Číselné typy

Při použití číselných typů (Double, Decimal a Long), $toDate vrátí datum, které odpovídá počtu milisekund reprezentovaných hodnotou. Pro Double a Decimal se jedná o zkrácenou hodnotu. $toDate operátor interpretuje číselné hodnoty následovně:

  • Pozitivní hodnota odpovídá počtu milisekund od 1. ledna 1970.
  • Záporná hodnota odpovídá počtu milisekund před 1. lednem 1970.

Typy řetězců

Při použití typu řetězce musí být řetězec platným datem. Například:

  • "2021-02-15"
  • "15 February 2021"
  • "2021-02-15 06:53:55"
  • "2021-02-15 06:53:55+1100"

Nelze použít neúplná data nebo neplatné hodnoty, jako je "Monday" , "March" , "2020" , atd.

ID objektu

Hodnoty ObjectId jsou 12bajtové hexadecimální hodnoty, které se skládají z:

  • Čtyřbajtová hodnota časového razítka představující vytvoření ObjectId, měřená v sekundách od epochy Unixu.
  • 5 bajtů je náhodná hodnota
  • 3bajtový inkrementační čítač, inicializovaný na náhodnou hodnotu.

$toDate operátor vrátí část časového razítka jako datum.


  1. java.lang.IncompatibleClassChangeError:Implementace třídy Mongo

  2. Kdy použít úložiště klíč/hodnota, jako je Redis, místo/po boku databáze SQL?

  3. Převod uloženého mongo data zpět na milisekundy od epochy Unixu při načtení?

  4. pipelining vs transakce v redis