sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $toDate

I MongoDB, $toDate aggregeringsoperatorn konverterar ett värde till ett datum

$toDate tar något giltigt uttryck. Om uttrycket inte kan konverteras till ett datum, returnerar det ett fel. Om uttrycket är null eller saknas returnerar den null .

Exempel

Anta att vi har en samling som heter samples med följande dokument:

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

Vi kan använda följande fråga för att returnera vart och ett av dessa värden som ett datum.

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

Resultat:

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

Som förväntat returneras alla fält med motsvarande värden omvandlade till datumvärden.

Du kanske märker att ObjectId-fältet returnerar ett annat datum än de andra. Detta beror på att _id fältets värde återspeglar datumet då dokumentet skapades, medan de andra datumen bara var godtyckliga datum skapade av mig. Mer om ObjectId nedan.

Indatatyper

$toDate operatören accepterar följande inmatningstyper:

  • Dubbel
  • Decimal
  • Lång
  • Sträng (måste vara en giltig datumsträng)
  • ObjectId

Mer om dessa nedan.

Numeriska typer

När du använder de numeriska typerna (dubbel, decimal och lång), $toDate returnerar ett datum som motsvarar antalet millisekunder som representeras av värdet. För dubbel och decimal är detta det trunkerade värdet. $toDate operatorn tolkar numeriska värden enligt följande:

  • Ett positivt värde motsvarar antalet millisekunder sedan 1 januari 1970.
  • Ett negativt värde motsvarar antalet millisekunder före 1 januari 1970.

Strängtyper

När du använder en strängtyp måste strängen vara en giltig datumsträng. Till exempel:

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

Du kan inte använda ofullständiga datum eller ogiltiga värden som "Monday" , "March" , "2020" , etc.

ObjectId

ObjectId-värden är hexadecimala värden på 12 byte som består av:

  • Ett tidsstämpelvärde på 4 byte, som representerar objekt-ID:ts skapelse, mätt i sekunder sedan Unix-epoken.
  • En 5 byte är ett slumpmässigt värde
  • En 3-byte inkrementerande räknare, initierad till ett slumpmässigt värde.

$toDate operatören returnerar tidsstämpeldelen som ett datum.


  1. Webbskrapning och genomsökning med Scrapy och MongoDB

  2. node.js mongodb välj dokument med _id node-mongodb-native

  3. Hur man separerar redis-databas för samma två app i node.js

  4. Hur unhideIndex() fungerar i MongoDB