So verwenden Sie den $ detiff -Betreiber in MongoDB
Der Operator von $ Datediff gibt die Differenz zwischen zwei Daten in der angegebenen Einheit zurück. Der $ -Dodiff -Operator verfügt über verschiedene Parameter, bei denen die Parameter von Startdate, Enddate und Einheiten erforderlich sind. Ohne diese Parameter können wir auf den MongoDB -Serverfehler stoßen. Wir verwenden die „Projekt“ -Kollektion, um mit dem $ datediff -Betreiber zusammenzuarbeiten. Die „Projekt“ -Kollektion ist ursprünglich leer, die mit den Dokumenten eingesetzt werden kann, indem die folgende Abfrage angewendet wird:
db.Projekt.InsertMany ([
"PID": 1,
"Projekt": "Android -Anwendung",
"Monat": "Januar",
"Team": 10,
"StartDate": Isodat ("2020-01-05"),
"Enddate": Isodat ("2021-01-10")
,
"PID": 2,
"Projekt": "Drohne",
"Monat": "Februar",
"Team": 20,
"StartDate": Isodat ("2023-02-01"),
"Enddate": Isodat ("2024-02-28")
,
"PID": 3,
"Projekt": "Shopping -Website",
"Monat März",
"Team": 5,
"StartDate": Isodat ("2021-03-25"),
"Enddate": Isodat ("2022-03-01")
,
"PID": 4,
"Projekt": "Softwareverwaltung",
"Monat Mai",
"Team": 9,
"StartDate": Isodat ("2022-05-01"),
"Enddate": Isodat ("2023-05-31")
]))
Die vorherige Abfrage fügte die Dokumente in die Sammlung von MongoDB in „Projekt“ ein, sodass das Ergebnis angezeigt wird. Jetzt können wir sehen, dass alle Dokumente zwei Felder haben, die das ISO -Formatdatum enthalten. Wir verwenden diese Datumsfelder über den $ dateiff -Betreiber, um den Unterschied in diesen Daten herauszufinden.
Anerkannt: wahr,
InsertDIDs:
'0': ObjectID ("63C53402B91C87F8B6A855F8"),
'1': ObjectID ("63C53402B91C87F8B6A855F9"),
'2': ObjectID ("63C53402B91C87F8B6A855FA"),
'3': ObjectID ("63C53402B91C87F8B6A855FB")
Beispiel 1: Verwenden Sie den $ dateiff in mongoDB für die Differenz zwischen dem Datum
Der $ -Dodiff -Betreiber ist auf den Feldern „Startdate“ und „Enddate“ aller Dokumente der Sammlung beschäftigt, um den Unterschied in diesen Daten zu erhalten, was ein ganzzahliger Wert ist. Wir verwenden die Gesamtmethode, bei der die $ -Projekt -Phase eingesetzt wird, um die Felder einzuschließen. Wir schließen die Felder für Startdate und Enddate als Wert von „1“ ein. Danach fügen wir ein "Ergebnis" -Feld ein, in dem der $ datierende Operator mit seinem Parameter definiert ist. Wir setzen den Parameter „StartDate“, der den Beginn der Zeit markiert.
Hier stellen wir dem Parameter „StartDate“ das Feld $ startDate zur Verfügung. Anschließend setzen wir den Parameter "Enddate", bei dem die Datumsperiode endet, und geben das Feld "$ enddate" an. Danach bieten wir dem $ datiff -Bediener einen anderen erforderlichen Parameter „Einheit“ an, dem wir einen "Tag" -Wert zuweisen. Dieser Parameter misst die Zeit zwischen dem Startdat und dem Enddatum. Die Pretty () -Methode von MongoDB erzeugt die Ergebnisse des $ datierten Operators auf strukturierte Weise.
db.Projekt.Aggregat(
[
$ project:
Start: "$ startdate",
Ende: "$ enddate",
Ergebnis:
$ datediff:
Startdate: "$ startdate",
Enddate: "$ enddate",
Einheit: "Tag"
]))
Die Differenz zwischen Startdate und Enddate jedes vorgesehenen Dokumentdatums wird in einem numerischen Wert gegen das Feld „Ergebnis“ gemäß der angegebenen Einheit im $ datiff -Bediener angezeigt.
[
_id: ObjectID ("63C53466B91C87F8B6A855FC"),
Start: Isodat ("2020-01-05T00: 00: 00.000Z "),
Ende: Isodat ("2021-01-10T00: 00: 00.000Z "),
Ergebnis: lang ("371")
,
_id: ObjectID ("63C53466B91C87F8B6A855FD"),
Start: Isodat ("2023-02-01T00: 00: 00.000Z "),
Ende: Isodat ("2024-02-28T00: 00: 00.000Z "),
Ergebnis: lang ("392")
,
_id: ObjectID ("63C53466B91C87F8B6A855FE"),
Start: Isodat ("2021-03-25T00: 00: 00.000Z "),
Ende: Isodat ("2022-03-01T00: 00: 00.000Z "),
Ergebnis: lang ("341")
,
_id: ObjectID ("63C53466B91C87F8B6A855ff"),
Start: Isodat ("2022-05-01T00: 00: 00.000Z "),
Ende: Isodat ("2023-05-31T00: 00: 00.000Z "),
Ergebnis: lang ("395")
]
Beispiel 2: Verwenden Sie den $ dateiff in mongoDB, um den Unterschied zwischen dem Datum und einer Nummer zu finden
Wenn wir versuchen, die Differenz des Startdates aus dem Feldzahlenfeld zu erhalten, wird der Fehler aufgrund des ungültigen Argumentwerts in MongoDB erhöht. Hier setzen wir den $ datEff -Betreiber in das Attribut „Ergebnis“ des $ Project -Operators. Der $ -Dodiff -Betreiber nimmt das Argument „Startdate“ an, in dem das Feld "$ startdate" des Dokuments angegeben ist. Dann geben wir das "Enddate" ein, in dem das Feld "Team" bereitgestellt wird. Das $ Teamfeld wird mit dem numerischen Wert gespeichert, der vom Differenzbetreiber vom $ datediff -Betreiber nicht verwendet werden kann. Dann weisen wir dem Argument „Einheit“ einen "Tag" -Wert zu.
db.Projekt.Aggregat(
[
$ project:
Ergebnis:
$ datediff:
Startdate: "$ startdate",
Enddate: "$ Team",
Einheit: "Tag"
])).hübsch()
Wir haben einen folgenden MongoDB -Serverfehler, da der Parameter „Enddate“ kein Datumswert ist. Daher ist es erforderlich, dass der $ -Dodiff -Betreiber nur mit Daten umgeht.
MongoServerError: Planexecutor -Fehler während der Aggregation :: verursacht durch :: $ datediff erfordert, dass 'Enddate' ein Datum sein muss, aber int wurde.
Beispiel 3: Verwenden Sie den $ datediff in mongoDB, um den Enddate vom Startdat zu subtrahieren
Der nächste Fall des $ datediff -Operator. Dann sind die erzeugten Ergebnisse in den negativen Werten enthalten. Lassen Sie uns die folgende Abfrage von $ datiff -Betreiber haben. Der $ datediff -Operator wird mit dem Parameter "startdate" eingegeben, in dem das Feld "Enddate" zugewiesen ist. Auf der anderen Seite geben wir ein "Startdate" -Feld, das dem Parameter "Enddate" die Startzeit ist. Der $ -Dodiff -Betreiber gibt die Differenz zwischen den Werten "Enddatus" aus den Werten "Startdate" zurück. Danach setzen wir den Einheitsparameter mit dem „Tag“, um die angegebenen Zeiträume der Daten zu messen.
db.Projekt.Aggregat(
[
$ project:
Ergebnis:
$ datediff:
Startdate: "$ enddate",
Enddate: "$ startdate",
Einheit: "Tag"
]
).hübsch()
Der $ -Dodiff -Operator gibt die Daten des Dokuments im Feld „Ergebnis“ aus, in dem alle Werte aufgrund der Switch -Argumentwerte in einer negativen Form sind.
[
_id: ObjectID ("63c53466b91c87f8b6a855fc"), Ergebnis: lang ("-371"),
_id: ObjectID ("63c53466b91c87f8b6a855fd"), Ergebnis: Long ("-392"),
_id: ObjectID ("63C53466B91C87F8B6A855FE"), Ergebnis: Long ("-341"),
_id: ObjectID ("63c53466b91c87f8b6a855ff"), Ergebnis: Long ("-395")
]
Beispiel 4: Verwenden Sie den $ dateiff in mongoDB mit den verschiedenen Einheitswerten
Der Zeitunterschied, der in Ganzzahleinheiten gemessen wird. Ein Gerät hat keine fraktionalen Teile. Es gibt keine Halbjahres, wenn es seit Jahren zählt. Wir führen die Abfrage dieser Erklärung aus. Wir erstellen das Feld „JahrUnit“ innerhalb des $ -Projektbetreibers und beschäftigen dort den $ datiff -Betreiber dort. Der $ -Dodiff -Betreiber nimmt die Werte gegen die Argumente „Startdate“ und „Enddate“ vor.
Beachten Sie, dass wir den Zeitraum „Jahr“ im Argument "Einheit" festgelegt haben. Der Unterschied zwischen den angegebenen Daten wird basierend auf der Jahreseinheit bewertet. Danach haben wir ein weiteres Feld, das "MonatUnit" ist, in dem der $ dateiff -Betreiber mit dem "Einheit" -Wert "Monat" angegeben ist. Als nächstes wird das Feld "DayUnit" des $ Project -Operator.
db.Projekt.Aggregat(
[
$ project:
Startdate: "$ startdate",
Enddate: "$ enddate",
JahrUnit:
$ datediff:
Startdate: "$ startdate",
Enddate: "$ enddate",
Einheit: "Jahr"
,
MonatUnit:
$ datediff:
Startdate: "$ startdate",
Enddate: "$ enddate",
Einheit: "Monat"
,
TageUnit:
$ datediff:
Startdate: "$ startdate",
Enddate: "$ enddate",
Einheit: "Tag"
]
)
Die Datumsunterschiede werden in den angegebenen Einheitswerten vom $ datiff -Betreiber zurückgegeben.
[
_id: ObjectID ("63C53466B91C87F8B6A855FC"),
StartDate: Isodat ("2020-01-05T00: 00: 00.000Z "),
Enddate: Isodat ("2021-01-10T00: 00: 00.000Z "),
JahrUnit: lang ("1"),
MonatUnit: lang ("12"),
DaysUnit: lang ("371")
,
_id: ObjectID ("63C53466B91C87F8B6A855FD"),
StartDate: Isodat ("2023-02-01T00: 00: 00.000Z "),
Enddate: Isodat ("2024-02-28T00: 00: 00.000Z "),
JahrUnit: lang ("1"),
MonatUnit: lang ("12"),
DaysUnit: lang ("392")
,
_id: ObjectID ("63C53466B91C87F8B6A855FE"),
StartDate: Isodat ("2021-03-25T00: 00: 00.000Z "),
Enddate: Isodat ("2022-03-01T00: 00: 00.000Z "),
JahrUnit: lang ("1"),
MonatUnit: lang ("12"),
DaysUnit: lang ("341")
,
_id: ObjectID ("63C53466B91C87F8B6A855ff"),
StartDate: Isodat ("2022-05-01T00: 00: 00.000Z "),
Enddate: Isodat ("2023-05-31T00: 00: 00.000Z "),
JahrUnit: lang ("1"),
MonatUnit: lang ("12"),
DaysUnit: lang ("395")
]
Abschluss
Der Artikel untersuchte den neuen MongoDB $ -Dodiff -Betreiber, bei dem der Differenzvorgang zwischen den beiden Daten durchgeführt wird. Wir haben den $ -Dodiff -Operator verwendet, um die Differenz zwischen den Werten zu den angegebenen Daten zu erhalten. Der $ datediff -Operator nimmt die Parameter ein, die mit den Datumswerten aus dem Dokument zusammen mit der Einheitzeit angegeben sind. Wir haben auch einige Beispiele durchgeführt, bei denen der $ datierende Betreiber in verschiedenen Fällen verwendet wird, um das Ergebnis innerhalb eines Einheitszeitraums zurückzugeben.