sql >> Database >  >> NoSQL >> MongoDB

MongoDB $toDate

In MongoDB is de $toDate aggregatie-operator converteert een waarde naar een datum

$toDate elke geldige uitdrukking aanneemt. Als de uitdrukking niet kan worden geconverteerd naar een datum, wordt een fout geretourneerd. Als de uitdrukking null . is of ontbreekt, retourneert het null .

Voorbeeld

Stel dat we een verzameling hebben met de naam samples met het volgende document:

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

We kunnen de volgende query gebruiken om elk van die waarden als een datum te retourneren.

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

Resultaat:

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

Zoals verwacht worden alle velden geretourneerd met de bijbehorende waarden geconverteerd naar datumwaarden.

Mogelijk merkt u dat het veld ObjectId een andere datum retourneert naar de andere. Dit komt omdat de _id de waarde van het veld geeft de datum weer waarop het document is gemaakt, terwijl de andere datums gewoon willekeurige datums waren die door mij waren gemaakt. Meer over de ObjectId hieronder.

Invoertypen

De $toDate operator accepteert de volgende invoertypen:

  • Dubbel
  • Decimaal
  • Lang
  • String (moet een geldige datumstring zijn)
  • Object-ID

Hieronder meer hierover.

Numerieke typen

Bij gebruik van de numerieke typen (Dubbel, Decimaal en Lang), $toDate geeft een datum terug die overeenkomt met het aantal milliseconden dat door de waarde wordt vertegenwoordigd. Voor dubbel en decimaal is dit de afgekapte waarde. De $toDate operator interpreteert numerieke waarden als volgt:

  • Een positieve waarde komt overeen met het aantal milliseconden sinds 1 januari 1970.
  • Een negatieve waarde komt overeen met het aantal milliseconden vóór 1 januari 1970.

Tekenreeksen

Als u een tekenreekstype gebruikt, moet de tekenreeks een geldige datumtekenreeks zijn. Bijvoorbeeld:

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

U kunt geen onvolledige datums of ongeldige waarden gebruiken, zoals "Monday" , "March" , "2020" , enz.

Object-ID

ObjectId-waarden zijn hexadecimale waarden van 12 bytes die bestaan ​​uit:

  • Een tijdstempelwaarde van 4 byte, die de creatie van de ObjectId vertegenwoordigt, gemeten in seconden sinds het Unix-tijdperk.
  • Een 5 byte is een willekeurige waarde
  • Een oplopende teller van 3 bytes, geïnitialiseerd op een willekeurige waarde.

De $toDate operator retourneert het tijdstempelgedeelte als een Datum.


  1. Hoe plaats je een document in mongodb met behulp van mangoest en krijg je de gegenereerde id?

  2. Een sessiearchief delen op Redis voor een Django- en een Express.js-toepassing

  3. hoe dood ik inactieve redis-clients?

  4. Sleutelwaardedatabase met Java-client