Se você tiver uma coleção do MongoDB com datas armazenadas como strings, poderá convertê-las no tipo Date BSON, se necessário.
Abaixo estão três maneiras de converter uma string em uma data no MongoDB.
Dados de amostra
Os exemplos neste artigo usam o seguinte documento em uma coleção chamada
dogs
:{ "_id" : 1, "name" : "Fetch", "born" : "2021-01-03T23:30:15.123" }
Podemos ver que o
born
campo contém uma data, mas essa data é armazenada como uma string. Podemos usar os seguintes operadores de pipeline de agregação para converter essa string em uma data.
A $dateFromString
Operador
O
$dateFromString
O operador de pipeline de agregação foi projetado especificamente para converter uma data em uma string. Requer um
dateString
argumento, que é a string que você deseja converter em uma data. Aqui está um exemplo de conversão da string na coleção acima para uma data:
db.dogs.aggregate([
{
$project: {
born: {
$dateFromString: {
dateString: '$born'
}
}
}
}
])
Resultado:
{ "_id" : 1, "born" : ISODate("2021-01-03T23:30:15.123Z") }
Podemos ver que a data agora está envolvida no auxiliar ISODate, o que significa que é um objeto Date.
O
$dateFromString
O operador aceita vários outros argumentos, todos opcionais. Veja MongoDB $dateFromString
para mais informações e exemplos. O $toDate
Operador
O
$toDate
operador de pipeline de agregação converte um valor em uma data. O valor pode ser qualquer tipo que possa ser convertido em uma data, que é basicamente números, strings e objectIds. Este artigo é sobre como converter strings em datas, então aqui está um exemplo de uso de
$toDate
para fazer exatamente isso:db.dogs.aggregate([
{
$project: {
"born": {
$toDate: "$born"
}
}
}
])
Resultado:
{ "_id" : 1, "born" : ISODate("2021-01-03T23:30:15.123Z") }
Veja Mongo
$toDate
para mais informações e exemplos. O $convert
Operador
O
$convert
operador foi projetado especificamente para a conversão entre um tipo e outro. A
input
O parâmetro especifica o campo que você deseja converter e o parâmetro to
O parâmetro especifica o tipo para o qual você deseja convertê-lo. Exemplo:
db.cats.aggregate(
[
{
$project:
{
result:
{
$convert: {
input: "$born",
to: "date",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Resultado:
{ "_id" : 1, "result" : ISODate("2021-01-03T23:30:15.123Z") }
Você deve ter notado que o
$convert
operador também aceita onError
e onNull
parâmetros, o que nos permite fornecer uma mensagem para usar no caso de um erro ou um null
valor. Isso evita que toda a operação de agregação seja interrompida e permite uma mensagem de erro amigável no documento de saída. Veja MongoDB
$convert
para mais informações e exemplos.