MONGODB $ DATETRUNC

MONGODB $ DATETRUNC

MongoDB zapewnia agregatowi operatora $ datETrunc do obcięcia danych zgodnie z daną datą. Operator $ DATETRUNC przyjmuje tylko jedną wartość daty, aby ją obciąć w formacie ISO. Argument „daty” $ datETrunc bierze wartości daty wraz z jednostką czasu. Operator $ DATETRUNC musi wymagać od tych danych wejściowych do obcięcia daty. Ponadto możemy również użyć opcjonalnych argumentów, takich jak strefa czasowa, binze i startOfWeek, aby obniżyć granicę daty w zakresie czasu. Operator $ DATETRUNC dzieli czas na przedziały czasowe w wybranym przez siebie jednostce czasowej do obliczeń.

Jak korzystać z operatora $ datETrunc w MongoDB?

Operator $ DATETRUNC jest używany w MongoDB do obcięcia danej daty. Tutaj współpracujemy z kolekcją „kwiaty”, których dokumenty są używane przez operatora $ datETrunc do demonstracji. W tym celu musimy dołączyć dokumenty w kolekcji „Kwiaty”, stosując metodę InsertMany (). Dane wyjściowe po wykonaniu polecenia dokumentów wstawiających pokazuje, że dokumenty są teraz przechowywane w kolekcji „kwiaty”.

db.Kwiaty.wstrząs
_id: 0, Typ: „Rose”, zamówienie: nowa data („2023-03-23T15: 06: 20z”), Ilość: 100,
_id: 1, Typ: „Lilly”, zamówienie: nowa data („2021-07-19T12: 11: 10z”), Ilość: 150,
_id: 2, Typ: „Tulip”, zamówienie: nowa data („2022-12-12T16: 14: 30z”), Ilość: 99,
_id: 3, Typ: „Whiterose”, zamówienie: nowa data („2023-08-13T05: 10: 20z”), Ilość: 500,
_id: 4, Typ: „Lavender”, zamówienie: nowa data („2020-01-01T19: 30: 10z”), Ilość: 200,
_id: 5, Typ: „Sunflower”, zamówienie: nowa data („2021-03-19T12: 12: 12Z”), Ilość: 50
])

Zauważ, że w dokumencie znajduje się pole ustawione z wartościami daty. Zamierzamy obciąć te daty za pomocą operatora $ datETrunc MongoDB.

WriteConcernerrors: [],
Wstawki: [
indeks: 0, _id: 0,
indeks: 1, _id: 1,
indeks: 2, _id: 2,
indeks: 3, _id: 3,
indeks: 4, _id: 4,
indeks: 5, _id: 5
],
Ninserted: 5,
Nupserted: 0,
nmatched: 0,
nmodified: 0,
NREMOVED: 0,
Upserted: []

Przykład nr 1: Korzystanie z operatora $ DATETRUNC do obcięcia daty w MongoDB

Tutaj zamierzamy wdrożyć operator $ DATETRUNC, który po prostu pobiera skróconą datę określonej daty. Dostaliśmy zapytanie do skorupy MongoDB, w której stosuje się metodę agregowaną do przeprowadzenia pozostałych operatorów. Nazwaliśmy metodą $ Project, aby uwzględnić pola „_id” i „_order” z dopasowanego dokumentu. Następnie ustawiliśmy inne pole „TruncedResult”, które wyświetliło wyniki z operatora $ datEtrunc. Zdefiniowaliśmy operator $ DATETRUNC, który jest przekazywany z parametrem „data” i określona w polu „$ zamów” o wartości daty. Parametr $ DATA $ DATETRUNC Obcięł datę za pomocą UTC. Następnie przekazaliśmy parametr „jednostki”, w którym czas wyraża się jako ciąg „Dzień”. Wartość „dnia” wskazuje, że izodat na początek dnia, który jest zwracany przez $ datEtrunc w dniu.

db.Kwiaty.agregować ([

$ projekt:
_id: 1,
Zamówienie: 1,
trucedDate:
$ dateTunc:
Data: „$ zamów”, jednostka: „dzień”




])

Dane wyjściowe z powyższego operatora $ datEtrunc pokazało obcięte daty wszystkich pola dokumentu „Zamów” w polu obciętym.

[[[

_id: 0,
Zamówienie: izodat („2023-03-23T15: 06: 20.000Z ”),
Skrócony data: izodat („2023-03-23T00: 00: 00.000Z ”)
,

_id: 1,
Zamówienie: izodat („2021-07-19T12: 11: 10.000Z ”),
Skrócony: Izodat („2021-07-19T00: 00: 00.000Z ”)
,

_id: 2,
Zamówienie: izodat („2022-12-12T16: 14: 30.000Z ”),
Skrócony data: izodat („2022-12-12T00: 00: 00.000Z ”)
,

_id: 3,
Zamówienie: izodat („2023-08-13T05: 10: 20.000Z ”),
Skrócony dat: Izodat („2023-08-13T00: 00: 00.000Z ”)
,

_id: 4,
Zamówienie: izodat („2020-01-01T19: 30: 10.000Z ”),
Skrócony data: izodat („2020-01-01T00: 00: 00.000Z ”)
,

_id: 5,
Zamówienie: izodat („2021-03-19T12: 12: 12.000Z ”),
Skrócony data: Izodat („2021-03-19T00: 00: 00.000Z ”)

]

Przykład nr 2: Korzystanie z operatora $ DATETRUNC z argumentem Binsize w celu obcięcia daty w MongoDB

Opcjonalny argument Binsize operatora $ DATETRUNC to wartość czasowa wyrażona jako wyrażenie numeryczne. Wyrażenie liczbowe musi być dodatnią niezerową liczbą całkowitą. Gdy zarówno binsyzowanie, jak i argument jednostki są używane razem, definiują okres oceny operatora $ datEtrunc. Wzięliśmy dokument, którego pola „Typ” wartość „Whiterose”, która jest zgodna z etapem $ Match tutaj.

Następnie zdefiniowano operator $ DATETRUNC w operatorze projektu $. $ DatETrunc najpierw przyjmuje „datę”, w którym podano pole „$ zamów”, ponieważ zawiera wartości daty. Następnie ustawiliśmy dane wejściowe „jednostki” z czasem „godzina” i „binze” z wartością liczbową „2”.

db.Kwiaty.agregować ([
$ match: „type”: „Whiterose”,

$ projekt:
_id: 1,
Zamówienie: 1,
TruncedResult:
$ dateTunc:
Data: „$ zamówienie”, jednostka: „godzina”, binze: 2




])

Czas „jednostki” to „godzina”, a „binize” ma wartość „2”. Tak więc czas między obciętym datą zwrotu z operatora $ datETrunc a datą zamówienia wynosi dwie godziny.

[[[

_id: 3,
Zamówienie: izodat („2023-08-13T05: 10: 20.000Z ”),
TruncatedResult: Isodate („2023-08-13T04: 00: 00.000Z ”)

]

Przykład nr 3: Korzystanie z operatora $ DATETRUNC z argumentem StartOfweek w celu obcięcia daty w MongoDB

Mamy inny argument opcji „StartOfWeek” operatora $ datETrunc, który określa początek tygodnia. Argument „StartofWeek” odbywa się tylko wtedy, gdy „jednostka” to tydzień. Tutaj pozyskujemy te dokumenty z $ Match Operator, którego operator $ NIN nie wybrał w wyrażeniu. Następnie wdrożyliśmy operator $ DATETRUNC w polu $ Project Stage „Truncdate”. Argumenty są przekazywane w ramach operatora $ DATETRUNC w celu zmniejszenia daty. Opcjonalny argument „StartOfWeek” jest również ustawiony na operator $ DATETRUNC z tygodniem „środa”. Operator $ DATETRUNC ściska pole „Zamów” do „1” binze i jednostki „tydzień” w strefie czasowej UTC z środą jako startOfWeek.

db.Kwiaty.agregować ([
$ match: "_id": $ nin: [1, 3, 5],

$ projekt:
_id: 1,
Zamówienie: 1,
Truncdate:
$ dateTunc:
Data: „$ zamówienie”, jednostka: „Tydzień”, binze: 1,
stref timeone: „UTC”, startofweek: „środa”




])

Wyniki operatora $ datETrunc są generowane z obcięty.

[[[

_id: 0,
Zamówienie: izodat („2023-03-23T15: 06: 20.000Z ”),
Truncdate: Izodat („2023-03-22T00: 00: 00.000Z ”)
,

_id: 2,
Zamówienie: izodat („2022-12-12T16: 14: 30.000Z ”),
Truncdate: Izodat („2022-12-07T00: 00: 00.000Z ”)
,

_id: 4,
Zamówienie: izodat („2020-01-01T19: 30: 10.000Z ”),
Truncdate: Izodat („2020-01-01T00: 00: 00.000Z ”)

]

Przykład nr 4: Korzystanie z operatora $ datETrunc do zwrócenia NULL w MongoDB

Operator $ DATETRUNC zwraca również wartość zerową w przypadku, gdy „startOfWeek” wprowadza pole, które jest puste lub przypisane do NULL, a gdy argument jednostki ma zestaw wartości jako „tydzień”, a startOfWeek nie jest określony lub ma null wartość. Rozważmy to stwierdzenie przy przykładowym skrypcie MongoDB. Mamy nowe włączenie pola „Truncedoutput” na etapie $ Project, w którym przeprowadziliśmy operator $ DATETRUNC. Operator $ DATETRUNC przyjmuje wejście „Data” w polu „Zamów”, jednostce jako tydzień i bilansuj „2” strefy czasowej „America/Los_angeles”. Zauważ, że nie przeszliśmy operatora $ DATETRUNC z argumentem „StartOfWeek”, ponieważ tydzień jest przypisany do parametru „jednostki”.

db.Kwiaty.agregować ([

$ projekt:
_id: 1,
Zamówienie: 1,
trucedoutput:
$ dateTunc:
Data: „$ OrderDate”, jednostka: „Tydzień”, Binsize: 2,
strefa czasowa: „Ameryka/los_angeles”




])

Tam otrzymaliśmy wynik zerowy w polu „Truncedoutput”, ponieważ nie wprowadziliśmy argumentu „StartOfWeek” do operatora $ datetrunc, mimo że urządzenie to jest tydzień.

[[[

_id: 0,
Zamówienie: izodat („2023-03-23T15: 06: 20.000Z ”),
Truncedoutput: NULL
,

_id: 1,
Zamówienie: izodat („2021-07-19T12: 11: 10.000Z ”),
Truncedoutput: NULL
,

_id: 2,
Zamówienie: izodat („2022-12-12T16: 14: 30.000Z ”),
Truncedoutput: NULL
,

_id: 3,
Zamówienie: izodat („2023-08-13T05: 10: 20.000Z ”),
Truncedoutput: NULL
,

_id: 4,
Zamówienie: izodat („2020-01-01T19: 30: 10.000Z ”),
Truncedoutput: NULL
,

_id: 5,
Zamówienie: izodat („2021-03-19T12: 12: 12.000Z ”),
Truncedoutput: NULL

]

Przykład nr 5: Korzystanie z operatora $ DATETRUNC do obcięcia daty wewnątrz operatora grupy $ w MongoDB

Wykorzystaliśmy operatora $ datETrunc na etapie grupy $ MongoDB, który ściska datę w klawiszie grupy i otrzymuje wyniki sumy określonego pola. Wdrożyliśmy etap grupy $ i dostarczyliśmy klucz grupowy „_id”, w którym powstaje nowe pole „Truncdate”, aby wykonać operację $ datETrunc. Do operatora $ datETrunc wprowadzimy „datę” jako pole „zamówienia” z czasem „miesiąca” i binanse „5”. Następnie ustawiamy kolejne pole „Dodatek”, w którym operator $ sum jest przypisany do pola $ QTY do operacji dodawania.

db.Kwiaty.agregować ([

$ grupa:
_ID:
DATETRUNC:
$ dateTunc:
Data: „$ zamówienie”, jednostka: „miesiąc”, binze: 5


,
Addquantity: $ sum: „$ Qty”


])

Data pola „Zamówienie” jest obcięta do pięciu miesięcy za pomocą operatora $ datETrunc w etapie grupy $, a suma wartości ilościowych jest również zwracana na wyjściu.

[[[

_id: datETrunc: Isodate („2020-01-01T00: 00: 00.000Z "),
Dodatek: 200
,

_id: datETrunc: Isodate („2020-11-01T00: 00: 00.000Z "),
Dodatek: 50
,

_id: datETrunc: Isodate („2022-12-01T00: 00: 00.000Z "),
Dodanie: 199
,

_id: datETrunc: Isodate („2021-04-01T00: 00: 00.000Z "),
Dodatek: 150
,

_id: datETrunc: Isodate („2023-05-01T00: 00: 00.000Z "),
Dodatek: 500

]

Wniosek

Omówiliśmy operator MongoDB $ datETrunc, który działa z datą ich obcięcia. Zbadaliśmy różne argumenty operatora $ DATETRUNC z przykładami. Operator $ DATETRUNC zajmuje się tylko dokumentami pola daty w kolekcji MongoDB. Operator $ DATETRUNT jest tu używany z argumentem „Binsize” i argumentem „StartOfWeek”, które są opcjonalne, ale odgrywają ważną rolę, jednocześnie obcinając daty w MongoDB.