MongoDB udostępnia różne opcje wyodrębniania części daty z daty.
W tym artykule przedstawiono 3 sposoby na zwrócenie części tygodnia z daty w MongoDB.
Przykładowe dane
Załóżmy, że mamy kolekcję o nazwie cats z następującymi dokumentami:
{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
{ "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:12Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:30:00Z") }
Poniższe przykłady pokazują różne opcje zwracania części tygodnia z born pola tych dokumentów.
$week Operator
$week operator zwraca tydzień roku dla daty jako liczbę z zakresu od 0 do 53.
Dlatego możemy uruchomić następujący kod, aby zwrócić tydzień od born w powyższym dokumencie.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthWeek: { $week: "$born" }
}
}
]
) Wynik:
{ "birthWeek" : 1 }
{ "birthWeek" : 49 }
{ "birthWeek" : 38 }
Możesz również określić strefę czasową podczas korzystania z $week operator.
Zobacz MongoDB $week aby uzyskać więcej informacji i przykładów.
$dateToString Operator
$dateToString operator konwertuje obiekt daty na ciąg znaków zgodnie z formatem określonym przez użytkownika. Użytkownik może zatem określić, że w razie potrzeby zwracana jest tylko część tygodnia.
Dla każdej części daty istnieją specyfikatory formatu. W odniesieniu do części daty tygodnia, %U specyfikator formatu zwraca tydzień roku, a %V specyfikator formatu zwraca tydzień roku w formacie ISO 8601.
Przykład:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthWeek: { $dateToString: { format: "%U", date: "$born" } },
birthWeekISO: { $dateToString: { format: "%V", date: "$born" } }
}
}
]
) Wynik:
{ "birthWeek" : "01", "birthWeekISO" : "53" }
{ "birthWeek" : "49", "birthWeekISO" : "49" }
{ "birthWeek" : "38", "birthWeekISO" : "39" }
Zobacz MongoDB $dateToString aby uzyskać więcej informacji i przykładów.
Zobacz także MongoDB $dateToString Specyfikatory formatu dla listy specyfikatorów formatu, których można używać z tym operatorem.
$isoWeek Operator
Jeśli chcesz zwrócić tydzień w formacie ISO 8601, użyj $isoWeek . Rok ISO 8601 rozpoczyna się w poniedziałek pierwszego tygodnia i kończy w niedzielę ostatniego tygodnia.
Przykład:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthIsoWeek: { $isoWeek: "$born" }
}
}
]
) Wynik:
{ "birthIsoWeek" : 53 }
{ "birthIsoWeek" : 49 }
{ "birthIsoWeek" : 39 }
Ten wynik jest inny niż w przypadku użycia $week operatora.
Oto przykład, który pokazuje różnicę.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthWeek: { $week: "$born" },
birthIsoWeek: { $isoWeek: "$born" }
}
}
]
) Wynik:
{ "birthWeek" : 1, "birthIsoWeek" : 53 }
{ "birthWeek" : 49, "birthIsoWeek" : 49 }
{ "birthWeek" : 38, "birthIsoWeek" : 39 }