MongoDB $ Datediff Operator

MongoDB $ Datediff Operator
Aby poradzić sobie z datami, MongoDB ma kilku różnych operatorów dat. Operator $ Datediff, który również akceptuje wyrażenie daty, aby poradzić sobie z datą, jest jednym z tych operatorów. Wyrażenie $ dedediff drukuje różnicę liczbową między startatem a endDate wyrażone w określonych jednostkach. Wyrażenie operatora $ Datediff musi zawierać startDate, EndDate i parametr jednostki. Parametr „strefa czasowa” i „startOfWeek” są opcjonalne w $ Datediff Operator. Algorytm operatora $ Datediff używa kalendarza gregoriańskiego w celu ustalenia różnicy daty. Ponadto operator $ Datediff zajmuje tylko lata i czas dzienny, podczas gdy sekundy skokowe nie są brane pod uwagę.

Jak korzystać z operatora $ Datediff w MongoDB

Operator $ Datediff zwraca różnicę między dwiema datami w danej jednostce. Operator $ Datediff ma różne parametry, w których wymagane są parametry StartDate, End -i i jednostki. Bez tych parametrów możemy napotkać błąd serwera MongoDB. Używamy kolekcji „projektu” do współpracy z $ Datediff Operatorem. Kolekcja „projektu” jest początkowo pusta, którą można włożyć do dokumentów, stosując następujące zapytanie:

db.Projekt.wstrząs

„PID”: 1,
„Projekt”: „Aplikacja na Androida”,
„Miesiąc”: „styczeń”,
„Zespół”: 10,
„StartoDate”: Isodate („2020-01-05”),
„Enddate”: Izodate („2021-01-10”)
,

„PID”: 2,
„Projekt”: „Dron”,
„Miesiąc”: „Luty”,
„Zespół”: 20,
„StartoDate”: Isodate („2023-02-01”),
„EndDate”: Izodate („2024-02-28”)
,

„PID”: 3,
„Projekt”: „Witryna zakupów”,
"Miesiąc marzec",
„Zespół”: 5,
„StartoDate”: Isodate („2021-03-25”),
„EndDate”: Izodate („2022-03-01”)
,

„PID”: 4,
„Projekt”: „Zarządzanie oprogramowaniem”,
"Miesiąc maj",
„Zespół”: 9,
„StartoDate”: Isodate („2022-05-01”),
„Enddate”: Izodate („2023-05-31”)

])

Poprzednie zapytanie wstawiono dokumenty w kolekcji „Project” MongoDB, ponieważ wynik pokazano. Teraz możemy zobaczyć, że wszystkie dokumenty mają dwa pola zawierające datę formatu ISO. Używamy tych pól daty w stosunku do operatora $ Datediff, aby znaleźć różnicę w tych datach.


Uznany: prawda,
InsertedIds:
„0”: ObjectID (”63C53402B91C87F8B6A855F8”),
„1”: ObjectID (”63C53402B91C87F8B6A855F9”),
„2”: ObjectID (”63C53402B91C87F8B6A855FA”),
„3”: ObjectID (”63C53402B91C87F8B6A855FB”)

Przykład 1: Korzystanie z $ datediff w MongoDB dla różnicy między datą

Operator $ Datediff jest zatrudniony na polach „StartoDate” i „Enddate” wszystkich dokumentów kolekcji, aby uzyskać różnicę w tych datach, która jest wartością liczbową. Używamy metody łącznej, w której stosuje się etap projektu $, aby uwzględnić pola. Uwzględniamy pola StartoDate i EndDate, ponieważ określono dla nich wartość „1”. Następnie wstawiamy pole „wyniku”, w którym operator $ Datediff jest zdefiniowany z jego parametrem. Ustawiamy parametr „StartoDate”, który oznacza początek czasu.

Tutaj zapewniamy pole $ startDate do parametru „startDate”. Następnie ustawiamy parametr „EndDate”, w którym kończy się okres daty, i podajemy pole „$ enddate”. Następnie podajemy kolejny wymagany parametr „jednostki” operatorowi $ Datediff, do którego przypisujemy wartość „dzienną”. Ten parametr mierzy czas między startem a końcem. Metoda Pretty () MongoDB generuje wyniki operatora $ Datediff w sposób ustrukturyzowany.

db.Projekt.agregat(
[[[

$ Project:

Start: „$ startoDate”,
Koniec: „$ enddate”,
wynik:

$ datediff:

StartDate: „$ startDate”,
ENDDATE: „$ ENDDATE”,
Jednostka: „dzień”




])

Różnica między startatem a endDate każdego podanego daty dokumentu jest wyświetlana w wartości liczbowej w stosunku do pola „Wynik” zgodnie z określoną jednostką w operatorze $ Datediff.

[[[

_id: ObjectID („63C53466B91C87F8B6A855FC”),
Start: Isodate („2020-01-05T00: 00: 00.000Z ”),
Koniec: Izodat („2021-01-10T00: 00: 00.000Z ”),
Wynik: długi („371”)
,

_ID: ObjectID („63C53466B91C87F8B6A855FD”),
Start: Isodate („2023-02-01T00: 00: 00.000Z ”),
Koniec: Isodate („2024-02-28T00: 00: 00.000Z ”),
Wynik: długi („392”)
,

_id: ObjectID („63C53466B91C87F8B6A855FE”),
Start: Isodate („2021-03-25T00: 00: 00.000Z ”),
Koniec: Izodat („2022-03-01T00: 00: 00.000Z ”),
Wynik: długi („341”)
,

_id: ObjectID („63C53466B91C87F8B6A85FFF”),
Start: Isodate („2022-05-01T00: 00: 00.000Z ”),
Koniec: Izodat („2023-05-31T00: 00: 00.000Z ”),
Wynik: długi („395”)

]

Przykład 2: Korzystanie z $ datediff w MongoDB w celu znalezienia różnicy między datą a liczbą

Jeśli spróbujemy uzyskać różnicę w polu liczbowym, błąd jest podniesiony w MongoDB z powodu nieprawidłowej wartości argumentu. Tutaj ustawiliśmy operator $ Datediff w atrybucie „Wynik” operatora $. Operator $ Datediff przyjmuje argument „StartoDate”, w którym podano pole dokumentu „$ startDate”. Następnie wprowadzamy „enddate”, w którym podano pole „zespołu”. Pole $ Team jest przechowywane z wartością liczbową, której nie można użyć dla operatora różnicy przez $ Datediff Operator. Następnie przypisujemy wartość „dzienną” argumentowi „jednostki”.

db.Projekt.agregat(
[[[
$ projekt:
wynik:
$ datediff:

StartDate: „$ startDate”,
ENDDATE: „$ Team”,
Jednostka: „dzień”




]).ładny()

Mamy następujący błąd serwera MongoDB, ponieważ parametr „enddate” nie jest wartością daty. Zatem jest wymagane, aby operator $ Datediff zajmował się tylko datami.

Mongoservererror: Błąd planExecutor podczas agregacji :: spowodowany przez :: $ datediff wymaga „endDate”, aby być datą, ale dostał int.

Przykład 3: Korzystanie z $ dedediff w MongoDB w celu odjęcia endDate od startowania

Kolejnym przypadkiem $ Datediff Operator jest miejsce, w którym przełączamy wartości parametrów „startDate” i „EndDate”. Następnie wygenerowane wyniki są w wartościach ujemnych. Miejmy następujące zapytanie $ Datediff Operator, w którym wdrażamy operator $ Datediff. Operator $ Datediff jest wprowadzany do parametru „StartoDate”, w którym przypisane jest pole „EndDate”. Z drugiej strony podajemy pole „StartoDate”, które jest czasem rozpoczęcia parametru „Enddate”. Operator $ Datediff zwraca różnicę między wartościami „endDate” z wartości „startDate”. Następnie ustawiamy parametr jednostki z „dniem”, aby zmierzyć określone okresy dat.

db.Projekt.agregat(
[[[
$ projekt:
wynik:
$ datediff:

StartoDate: „$ enddate”,
ENDDATE: „$ startoDate”,
Jednostka: „dzień”




]
).ładny()

Operator $ Datediff wyświetla daty dokumentu w polu „Wynik”, w którym wszystkie wartości są w formie ujemnej ze względu na wartości argumentu przełącznika.

[[[
_ID: ObjectId („63C53466B91C87F8B6A8555FC”), wynik: Long („-371”),
_ID: ObjectID („63C53466B91C87F8B6A855FD”), wynik: Long („-392”),
_ID: ObjectID („63C53466B91C87F8B6A855FE”), wynik: Long („-341”),
_ID: ObjectID („63C53466B91C87F8B6A85FF”), wynik: Long ("-395")
]

Przykład 4: Korzystanie z $ dedediff w MongoDB z różnymi wartościami jednostkowymi

Różnica czasu mierzona w jednostkach całkowitowych jest zwracana przez wyrażenie $ dedediff. Jednostka nie ma części ułamkowych. Nie ma pół roku, gdy liczy się w latach. Wykonujemy zapytanie tego oświadczenia, w którym argument „jednostki” $ Datediff jest używany z różnymi wartościami. Tworzymy pole „rocznie” w ramach operatora projektu $ i zatrudniamy tam operatora $ Datediff. Operator $ Datediff przyjmuje wartości w stosunku do argumentów „StartoDate” i „Endandate”.

Zauważ, że ustawiliśmy okres „roku” w argumencie „jednostki”. Różnica między określonymi datami jest oceniana na podstawie jednostki roku. Następnie mamy kolejne pole, które jest „miesiącUnit”, w którym operator $ Datediff jest określony z wartością „jednostki” „Miesiąc”. Następnie pole „DayUnit” operatora $ Project nazywa się $ datediff z wartością „jednostki” jako „dzień” w celu zmierzenia różnicy okresu dat z jednostką dzienną.

db.Projekt.agregat(
[[[

$ Project:

StartDate: „$ startDate”,
ENDDATE: „$ ENDDATE”,
Rok:

$ datediff:

StartDate: „$ startDate”,
ENDDATE: „$ ENDDATE”,
Jednostka: „Rok”

,
MonthUnit:

$ datediff:

StartDate: „$ startDate”,
ENDDATE: „$ ENDDATE”,
Jednostka: „Miesiąc”

,
DaysUnit:

$ datediff:

StartDate: „$ startDate”,
ENDDATE: „$ ENDDATE”,
Jednostka: „dzień”




]
)

Różnice daty są zwracane w danych wartościach jednostkowych przez $ Datediff Operator.

[[[

_id: ObjectID („63C53466B91C87F8B6A855FC”),
StartoDate: Isodate („2020-01-05T00: 00: 00.000Z ”),
ENDDATE: Izodat („2021-01-10T00: 00: 00.000Z ”),
Rok: długa („1”),
MonthUnit: Long („12”),
DaysUnit: Long („371”)
,

_id: ObjectID („63C53466B91C87F8B6A855FD”),
StartoDate: Isodate („2023-02-01T00: 00: 00.000Z ”),
ENDDATE: Izodat („2024-02-28T00: 00: 00.000Z ”),
Rok: długa („1”),
MonthUnit: Long („12”),
DaysUnit: Long („392”)
,

_id: ObjectID („63C53466B91C87F8B6A855FE”),
StartoDate: Isodate („2021-03-25T00: 00: 00.000Z ”),
ENDDATE: Izodat („2022-03-01T00: 00: 00.000Z ”),
Rok: długa („1”),
MonthUnit: Long („12”),
DaysUnit: Long („341”)
,

_id: ObjectID („63C53466B91C87F8B6A85FFF”),
StartoDate: Isodate („2022-05-01T00: 00: 00.000Z ”),
ENDDATE: Izodat („2023-05-31T00: 00: 00.000Z ”),
Rok: długa („1”),
MonthUnit: Long („12”),
DaysUnit: Long („395”)

]

Wniosek

W artykule zbadano nowy operator MongoDB $ Datediff, w którym operacja różnicy jest przeprowadzana między dwiema datami. Użyliśmy operatora $ Datediff, aby uzyskać różnicę między wartościami z określonych dat. Operator $ Datediff przyjmuje parametry określone z wartościami daty z dokumentu wraz z czasem jednostki. Wykonaliśmy również kilka przykładów, w których operator $ Datediff jest używany w różnych przypadkach do zwrócenia wyniku w okresie jednostkowym.