MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB $toDate

Dans MongoDB, le $toDate l'opérateur d'agrégation convertit une valeur en une date

$toDate prend n'importe quelle expression valide. Si l'expression ne peut pas être convertie en date, elle renvoie une erreur. Si l'expression est null ou manquant, il renvoie null .

Exemple

Supposons que nous ayons une collection appelée samples avec le document suivant :

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

Nous pouvons utiliser la requête suivante pour renvoyer chacune de ces valeurs sous forme de date.

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

Résultat :

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

Comme prévu, tous les champs sont renvoyés avec leurs valeurs correspondantes converties en valeurs de date.

Vous remarquerez peut-être que le champ ObjectId renvoie une date différente des autres. C'est parce que le _id La valeur du champ reflète la date à laquelle le document a été créé, alors que les autres dates n'étaient que des dates arbitraires créées par moi. Plus d'informations sur l'ObjectId ci-dessous.

Types d'entrée

Le $toDate l'opérateur accepte les types d'entrée suivants :

  • Double
  • Décimal
  • Long
  • Chaîne (doit être une chaîne de date valide)
  • ObjectId

Plus d'informations à ce sujet ci-dessous.

Types numériques

Lors de l'utilisation des types numériques (Double, Decimal et Long), $toDate renvoie une date qui correspond au nombre de millisecondes représenté par la valeur. Pour Double et Decimal, il s'agit de la valeur tronquée. Le $toDate l'opérateur interprète les valeurs numériques comme suit :

  • Une valeur positive correspond au nombre de millisecondes depuis le 1er janvier 1970.
  • Une valeur négative correspond au nombre de millisecondes avant le 1er janvier 1970.

Types de chaînes

Lors de l'utilisation d'un type de chaîne, la chaîne doit être une chaîne de date valide. Par exemple :

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

Vous ne pouvez pas utiliser de dates incomplètes ou de valeurs non valides telles que "Monday" , "March" , "2020" , etc.

ID d'objet

Les valeurs ObjectId sont des valeurs hexadécimales de 12 octets qui se composent de :

  • Une valeur d'horodatage de 4 octets, représentant la création de l'ObjectId, mesurée en secondes depuis l'époque Unix.
  • A 5 octets est une valeur aléatoire
  • Un compteur incrémentant de 3 octets, initialisé à une valeur aléatoire.

Le $toDate l'opérateur renvoie la partie horodatage sous forme de date.