Jeśli masz kolekcję MongoDB z datami przechowywanymi jako ciągi, możesz je w razie potrzeby przekonwertować na typ Date BSON.
Poniżej znajdują się trzy sposoby konwersji ciągu na datę w MongoDB.
Przykładowe dane
W przykładach w tym artykule wykorzystano następujący dokument w kolekcji o nazwie dogs :
{ "_id" : 1, "name" : "Fetch", "born" : "2021-01-03T23:30:15.123" }
Widzimy, że born pole zawiera datę, ale data ta jest przechowywana jako ciąg.
Możemy użyć następujących operatorów potoku agregacji, aby przekonwertować ten ciąg na datę.
$dateFromString Operator
$dateFromString Operator potoku agregacji został zaprojektowany specjalnie do konwersji daty na ciąg.
Wymaga dateString argument, który jest ciągiem, który chcesz przekonwertować na datę.
Oto przykład konwersji ciągu w powyższej kolekcji na datę:
db.dogs.aggregate([
{
$project: {
born: {
$dateFromString: {
dateString: '$born'
}
}
}
}
]) Wynik:
{ "_id" : 1, "born" : ISODate("2021-01-03T23:30:15.123Z") } Widzimy, że data jest teraz opakowana w pomocnik ISODate, co oznacza, że jest to obiekt Date.
$dateFromString operator akceptuje kilka innych argumentów, z których wszystkie są opcjonalne. Zobacz MongoDB $dateFromString aby uzyskać więcej informacji i przykładów.
$toDate Operator
$toDate Operator potoku agregacji konwertuje wartość na datę. Wartość może być dowolnego typu, który można przekonwertować na datę, czyli zasadniczo liczby, łańcuchy i identyfikatory obiektów.
Ten artykuł dotyczy konwertowania ciągów na daty, więc oto przykład użycia $toDate zrobić właśnie to:
db.dogs.aggregate([
{
$project: {
"born": {
$toDate: "$born"
}
}
}
]) Wynik:
{ "_id" : 1, "born" : ISODate("2021-01-03T23:30:15.123Z") }
Zobacz Mongo $toDate aby uzyskać więcej informacji i przykładów.
$convert Operator
$convert operator został specjalnie zaprojektowany do konwersji między jednym typem a drugim.
input parametr określa pole, które chcesz przekonwertować, a to parametr określa typ, na który chcesz go przekonwertować.
Przykład:
db.cats.aggregate(
[
{
$project:
{
result:
{
$convert: {
input: "$born",
to: "date",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
) Wynik:
{ "_id" : 1, "result" : ISODate("2021-01-03T23:30:15.123Z") }
Być może zauważyłeś, że $convert operator akceptuje również onError i onNull parametry, które pozwalają nam dostarczyć komunikat do użycia w przypadku błędu lub null wartość. Zapobiega to zatrzymaniu całej operacji agregacji i umożliwia wyświetlanie przyjaznego dla użytkownika komunikatu o błędzie w dokumencie wyjściowym.
Zobacz MongoDB $convert aby uzyskać więcej informacji i przykładów.