MongoDB $ datediff operatør

MongoDB $ datediff operatør
For å håndtere datoer har MongoDB flere forskjellige datooperatører. $ Datediff -operatøren, som også aksepterer datouttrykket for å håndtere datoen, er en av disse operatørene. $ Datediff -uttrykket skriver ut den numeriske forskjellen mellom startdato og enddate uttrykt i de definerte enhetene. $ Datediff operatøruttrykket må inneholde startdato, enddate og enhetsparameter. "Timezone" og "Startofweek" -parameteren er valgfritt i $ datediff -operatøren. Algoritmen til $ datediff -operatøren bruker den gregorianske kalenderen for å bestemme datoforskjellen. Videre tar $ datediff -operatøren bare sprangår og dagslysetid, mens sprang sekundene ikke blir tatt i betraktning.

Hvordan bruke $ datediff -operatøren i MongoDB

$ Datediff -operatøren returnerer forskjellen mellom to datoer i den gitte enheten. $ Datediff -operatøren har forskjellige parametere der startdato-, enddato- og enhetsparametere er påkrevd. Uten disse parametrene kan vi møte MongoDB -serverfeilen. Vi bruker "Project" -samlingen for å jobbe med $ datediff -operatøren. "Project" -samlingen er opprinnelig tom som kan settes inn med dokumentene ved å bruke følgende spørsmål:

db.Prosjekt.INSERTMANY ([

"Pid": 1,
"Prosjekt": "Android -applikasjon",
"Måned": "januar",
"Team": 10,
"StartDate": Isodate ("2020-01-05"),
"Enddate": Isodate ("2021-01-10")
,

"Pid": 2,
"Prosjekt": "Drone",
"Måned": "Februar",
"Team": 20,
"StartDate": Isodate ("2023-02-01"),
"Enddate": Isodate ("2024-02-28")
,

"Pid": 3,
"Prosjekt": "Shopping nettsted",
"Måned": "Mars",
"Team": 5,
"StartDate": Isodate ("2021-03-25"),
"Enddate": Isodate ("2022-03-01")
,

"Pid": 4,
"Prosjekt": "Software Management",
"Måned": "Mai",
"Team": 9,
"StartDate": Isodate ("2022-05-01"),
"Enddate": Isodate ("2023-05-31")

])

Den forrige spørringen satte inn dokumentene i "Project" -samlingen av MongoDB som resultatet vises. Nå kan vi se at alle dokumentene har to felt som inneholder ISO -formatdatoen. Vi bruker disse datofeltene over $ datediff -operatøren for å finne ut forskjellen i disse datoene.


Anerkjent: sant,
innsats:
'0': ObjectId ("63c53402b91c87f8b6a855f8"),
'1': ObjectId ("63c53402b91c87f8b6a855f9"),
'2': ObjectId ("63c53402b91c87f8b6a855fa"),
'3': ObjectId ("63c53402b91c87f8b6a855fb")

Eksempel 1: Bruke $ datediff i MongoDB for forskjellen mellom dato

$ Datediff -operatøren er ansatt på "startdate" og "enddate" -feltene i alle dokumenter i samlingen for å få forskjellen i disse datoene, som er en heltallverdi. Vi bruker den samlede metoden der $ prosjektstadiet brukes til å inkludere feltene. Vi inkluderer startdato- og enddatofeltene som verdien av “1” er spesifisert for dem. Etter det setter vi inn et "resultat" -felt der $ datediff -operatøren er definert med parameteren. Vi setter parameteren "StartDate" som markerer begynnelsen av tiden.

Her gir vi $ StartDate -feltet til "StartDate" -parameteren. Deretter setter vi parameteren "Enddate" der datoen for datoen slutter, og vi gir "$ enddate" -feltet. Etter det gir vi en annen nødvendig "enhet" -parameter til $ datediff -operatøren som vi tildeler en "dag" -verdi. Denne parameteren måler tiden mellom startdatoen og enddate. Den pene () metoden til MongoDB genererer resultatene fra $ datediff -operatøren på en strukturert måte.

db.Prosjekt.aggregat (
[

$ prosjekt:

Start: "$ startdate",
Slutt: "$ enddate",
resultat:

$ datediff:

startdato: "$ startdate",
enddate: "$ enddate",
Enhet: "Dag"




])

Forskjellen mellom startdato og sluttdato for hver oppgitt dokumentdato vises i en numerisk verdi mot "resultatet" -feltet i henhold til den spesifiserte enheten i $ dateff -operatøren.

[

_ID: ObjectID ("63C53466B91C87F8B6A855FC"),
Start: Isodate ("2020-01-05T00: 00: 00.000z "),
Slutt: Isodate ("2021-01-10T00: 00: 00.000z "),
Resultat: Lang ("371")
,

_ID: ObjectID ("63C53466B91C87F8B6A855FD"),
Start: Isodate ("2023-02-01T00: 00: 00.000z "),
Slutt: Isodate ("2024-02-28t00: 00: 00.000z "),
Resultat: Lang ("392")
,

_ID: ObjectID ("63C53466B91C87F8B6A855FE"),
Start: Isodate ("2021-03-25t00: 00: 00.000z "),
Slutt: Isodate ("2022-03-01T00: 00: 00.000z "),
Resultat: Lang ("341")
,

_ID: ObjectID ("63C53466B91C87F8B6A855FF"),
Start: Isodate ("2022-05-01T00: 00: 00.000z "),
Slutt: Isodate ("2023-05-31T00: 00: 00.000z "),
Resultat: Lang ("395")

]

Eksempel 2: Bruke $ datediff i MongoDB for å finne forskjellen mellom datoen og et tall

Hvis vi prøver å få forskjellen på startdato fra antall felt, blir feilen reist i MongoDB på grunn av den ugyldige argumentverdien. Her satte vi $ datediff -operatøren innen "resultat" -attributtet til $ prosjektoperatøren. $ Datediff -operatøren tar "startdate" -argumentet der "$ startdate" -feltet i dokumentet er gitt. Deretter legger vi inn "enddate" der "teamet" -feltet er gitt. $ Team -feltet lagres med den numeriske verdien som ikke kan brukes til forskjellsoperatøren av $ datediff -operatøren. Deretter tildeler vi en "dag" -verdi til "enhet" -argumentet.

db.Prosjekt.aggregat (
[
$ prosjekt:
resultat:
$ datediff:

startdato: "$ startdate",
Enddate: "$ team",
Enhet: "Dag"




]).ganske()

Vi har en følgende MongoDB -serverfeil fordi "Enddate" -parameteren ikke er en datoverdi. Dermed er det påkrevd for $ datediff -operatøren å bare håndtere datoer.

MongoServerError: planexecutor feil under aggregering :: forårsaket av :: $ datediff krever 'enddate' for å være en dato, men fikk int.

Eksempel 3: Bruke $ datediff i MongoDB for å trekke enddate fra startdatoen

Det neste tilfellet med $ datediff -operatøren er der vi bytter verdiene til "startdate" og "enddate" -parametere. Deretter er de genererte resultatene i de negative verdiene. La oss ha følgende $ datediff operatørforespørsel der vi distribuerer $ datediff -operatøren. $ Datediff -operatøren blir lagt inn med "startdate" -parameteren der "enddate" -feltet er tildelt. På den annen side gir vi et "startdate" -felt som er starttiden til "enddate" -parameteren. $ Datediff -operatøren returnerer forskjellen mellom "enddate" -verdiene fra "startdate" -verdiene. Etter det satte vi enhetsparameteren med "dagen" for å måle de gitte periodene av datoene.

db.Prosjekt.aggregat (
[
$ prosjekt:
resultat:
$ datediff:

Startdato: "$ enddate",
Enddate: "$ startdate",
Enhet: "Dag"




]
).ganske()

$ Datediff -operatøren sender ut datoene for dokumentet i "Resultat" -feltet der alle verdiene er i en negativ form på grunn av bryterens argumentverdier.

[
_id: ObjectId ("63c53466b91c87f8b6a855fc"), resultat: long ("-371"),
_id: ObjectId ("63c53466b91c87f8b6a855fd"), resultat: long ("-392"),
_id: ObjectId ("63c53466b91c87f8b6a855fe"), resultat: long ("-341"),
_id: ObjectId ("63c53466b91c87f8b6a855ff"), resultat: long ("-395")
]

Eksempel 4: Bruke $ datediff i MongoDB med de forskjellige enhetsverdiene

Tidsforskjellen som måles i heltallenheter returneres av $ datediff -uttrykket. En enhet har ingen brøkdeler. Det er ingen halvår når du teller på mange år. Vi utfører spørringen i denne uttalelsen der $ datediff operatør "enhet" -argumentet brukes med forskjellige verdier. Vi oppretter "YearUnit" -feltet innen $ Prosjektoperatøren og bruker $ datediff -operatøren der. $ Datediff -operatøren tar verdiene mot "startdate" og "enddate" argumenter.

Merk at vi setter "år" -perioden i "enhet" -argumentet. Forskjellen mellom de spesifiserte datoene blir evaluert basert på årets enhet. Etter det har vi et annet felt som er "MonthUnit" der $ datediff -operatøren er spesifisert med "enhet" -verdien "måned". Deretter kalles "DayUnit" -feltet til $ Prosjektoperatør.

db.Prosjekt.aggregat (
[

$ prosjekt:

Startdato: "$ startdate",
Enddate: "$ enddate",
Årunit:

$ datediff:

startdato: "$ startdate",
enddate: "$ enddate",
Enhet: "År"

,
MonthUnit:

$ datediff:

startdato: "$ startdate",
enddate: "$ enddate",
Enhet: "Måned"

,
Daysunit:

$ datediff:

startdato: "$ startdate",
enddate: "$ enddate",
Enhet: "Dag"




]
)

Datoforskjellene returneres i de gitte enhetsverdiene av $ datediff -operatøren.

[

_ID: ObjectID ("63C53466B91C87F8B6A855FC"),
StartDate: Isodate ("2020-01-05T00: 00: 00.000z "),
Enddate: Isodate ("2021-01-10T00: 00: 00.000z "),
YearUnit: Long ("1"),
MonthUnit: Long ("12"),
Daysunit: Long ("371")
,

_ID: ObjectID ("63C53466B91C87F8B6A855FD"),
StartDate: Isodate ("2023-02-01T00: 00: 00.000z "),
Enddate: Isodate ("2024-02-28t00: 00: 00.000z "),
YearUnit: Long ("1"),
MonthUnit: Long ("12"),
Daysunit: Long ("392")
,

_ID: ObjectID ("63C53466B91C87F8B6A855FE"),
StartDate: Isodate ("2021-03-25T00: 00: 00.000z "),
Enddate: Isodate ("2022-03-01T00: 00: 00.000z "),
YearUnit: Long ("1"),
MonthUnit: Long ("12"),
Daysunit: Long ("341")
,

_ID: ObjectID ("63C53466B91C87F8B6A855FF"),
StartDate: Isodate ("2022-05-01T00: 00: 00.000z "),
Enddate: Isodate ("2023-05-31T00: 00: 00.000z "),
YearUnit: Long ("1"),
MonthUnit: Long ("12"),
Daysunit: Long ("395")

]

Konklusjon

Artikkelen utforsket den nye MongoDB $ datediff -operatøren der forskjellsoperasjonen utføres mellom de to datoene. Vi brukte $ datediff -operatøren for å få forskjellen mellom verdiene fra de spesifiserte datoene. $ Datediff -operatøren tar parametrene som er spesifisert med datoverdiene fra dokumentet sammen med enhetstiden. Vi utførte også noen eksempler der $ datediff -operatøren brukes i forskjellige tilfeller for å returnere resultatet innen en enhetsperiode.