MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB $toDate


No MongoDB, o $toDate operador de agregação converte um valor em uma data

$toDate recebe qualquer expressão válida. Se a expressão não puder ser convertida em uma data, ela retornará um erro. Se a expressão for null ou ausente, ele retorna null .

Exemplo


Suponha que tenhamos uma coleção chamada samples com o seguinte documento:
{
	"_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"),
	"double" : 1613372035500.75,
	"decimal" : NumberDecimal("1613372035500.75"),
	"long" : NumberLong("1613372035500"),
	"string" : "2021-02-15 06:53:55"
}

Podemos usar a seguinte consulta para retornar cada um desses valores como uma Data.
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 esperado, todos os campos são retornados com seus valores correspondentes convertidos em valores de data.

Você pode notar que o campo ObjectId retorna uma data diferente dos demais. Isso ocorre porque o _id o valor do campo reflete a data em que o documento foi criado, enquanto as outras datas foram apenas datas arbitrárias criadas por mim. Mais sobre o ObjectId abaixo.

Tipos de entrada


O $toDate O operador aceita os seguintes tipos de entrada:
  • Duplo
  • Decimal
  • Longo
  • String (deve ser uma string de data válida)
  • ObjectID

Mais sobre estes abaixo.

Tipos Numéricos


Ao usar os tipos numéricos (Double, Decimal e Long), $toDate retorna uma data que corresponde ao número de milissegundos representado pelo valor. Para Double e Decimal, este é o valor truncado. O $toDate O operador interpreta os valores numéricos da seguinte forma:
  • Um valor positivo corresponde ao número de milissegundos desde 1º de janeiro de 1970.
  • Um valor negativo corresponde ao número de milissegundos antes de 1º de janeiro de 1970.

Tipos de string


Ao usar um tipo de string, a string deve ser uma string de data válida. Por exemplo:
  • "2021-02-15"
  • "15 February 2021"
  • "2021-02-15 06:53:55"
  • "2021-02-15 06:53:55+1100"

Você não pode usar datas incompletas ou valores inválidos, como "Monday" , "March" , "2020" , etc

ObjectId


Os valores ObjectId são valores hexadecimais de 12 bytes que consistem em:
  • Um valor de carimbo de data/hora de 4 bytes, representando a criação do ObjectId, medido em segundos desde a época do Unix.
  • Um valor de 5 bytes é aleatório
  • Um contador de incremento de 3 bytes, inicializado com um valor aleatório.

O $toDate O operador retorna a parte do carimbo de data/hora como uma Data.