sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB $ hasta la fecha

En MongoDB, el $toDate el operador de agregación convierte un valor en una fecha

$toDate toma cualquier expresión válida. Si la expresión no se puede convertir en una fecha, devuelve un error. Si la expresión es null o falta, devuelve null .

Ejemplo

Supongamos que tenemos una colección llamada samples con el siguiente documento:

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

Podemos usar la siguiente consulta para devolver cada uno de esos valores como una fecha.

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

Resultado:

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

Como era de esperar, todos los campos se devuelven con sus valores correspondientes convertidos a valores de Fecha.

Puede notar que el campo ObjectId devuelve una fecha diferente a las demás. Esto se debe a que el _id El valor del campo refleja la fecha en que se creó el documento, mientras que las otras fechas fueron solo fechas arbitrarias creadas por mí. Más información sobre el ObjectId a continuación.

Tipos de entrada

El $toDate el operador acepta los siguientes tipos de entrada:

  • Doble
  • decimales
  • Largo
  • Cadena (debe ser una cadena de fecha válida)
  • Id. de objeto

Más sobre estos a continuación.

Tipos numéricos

Al usar los tipos numéricos (Doble, Decimal y Largo), $toDate devuelve una fecha que corresponde al número de milisegundos representado por el valor. Para Double y Decimal, este es el valor truncado. El $toDate El operador interpreta los valores numéricos de la siguiente manera:

  • Un valor positivo corresponde al número de milisegundos desde el 1 de enero de 1970.
  • Un valor negativo corresponde al número de milisegundos antes del 1 de enero de 1970.

Tipos de cadenas

Cuando se usa un tipo de cadena, la cadena debe ser una cadena de fecha válida. Por ejemplo:

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

No puede usar fechas incompletas o valores no válidos como "Monday" , "March" , "2020" , etc.

Id. de objeto

Los valores de ObjectId son valores hexadecimales de 12 bytes que constan de:

  • Un valor de marca de tiempo de 4 bytes, que representa la creación del ObjectId, medido en segundos desde la época de Unix.
  • Un byte de 5 es un valor aleatorio
  • Un contador incremental de 3 bytes, inicializado a un valor aleatorio.

El $toDate el operador devuelve la parte de la marca de tiempo como una fecha.