MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $subtrahieren

In MongoDB können Sie den $subtract verwenden Aggregations-Pipeline-Operator zum Subtrahieren von Zahlen und/oder Daten.

Insbesondere $subtract kann die folgenden drei Dinge tun:

  • Zwei Zahlen subtrahieren, um die Differenz zurückzugeben
  • Subtrahieren Sie eine Zahl (in Millisekunden) von einem Datum und geben Sie das resultierende Datum zurück
  • Subtrahieren Sie zwei Datumsangaben, um die Differenz in Millisekunden zurückzugeben

Der $subtract Operator akzeptiert die Werte als Argumente. Die Argumente können alle gültigen Ausdrücke sein, solange sie in Zahlen und/oder Datumsangaben aufgelöst werden. Um eine Zahl von einem Datum zu subtrahieren, muss das Datum das erste Argument sein..

Beispieldaten

Angenommen, wir haben eine Sammlung namens data mit folgendem Dokument:

{
	"_id" : 1,
	"a" : 20000,
	"b" : 250,
	"start" : ISODate("2021-01-03T00:00:00Z"),
	"end" : ISODate("2021-01-03T23:30:15.100Z")
}

Zahlen subtrahieren

Wir können den $subtract verwenden Operator zum Subtrahieren des a Feld aus dem b Feld (oder umgekehrt).

Beispiel:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       a: 1, 
       b: 1, 
       result: { 
         $subtract: [ "$a", "$b" ] } } 
         }
   ]
)

Ergebnis:

{ "a" : 20000, "b" : 250, "result" : 19750 }

Subtrahiere eine Zahl von einem Datum

Wenn das erste Argument ein Datum und das zweite Argument eine Zahl ist, wird $subtract Operator subtrahiert die Zahl vom Datum in Millisekunden.

Beispiel:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       b: 1, 
       start: 1, 
       result: { 
         $subtract: [ "$start", "$b" ] } } 
         }
   ]
).pretty()

Ergebnis:

{
	"b" : 250,
	"start" : ISODate("2021-01-03T00:00:00Z"),
	"result" : ISODate("2021-01-02T23:59:59.750Z")
}

Wir können sehen, dass 250 Millisekunden vom Datum abgezogen wurden.

Wenn wir eine Zahl von einem Datum subtrahieren, muss das Datum das erste Argument mit der Zahl als zweitem Argument sein.

Folgendes passiert, wenn wir die Argumente vertauschen:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       b: 1, 
       start: 1, 
       result: { 
         $subtract: [ "$b", "$start" ] } } 
         }
   ]
).pretty()

Ergebnis:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cant $subtract adate from a double",
	"code" : 16556,
	"codeName" : "Location16556"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Wir erhalten eine Fehlermeldung, die uns mitteilt, dass ein Datum nicht von einem Double subtrahiert werden kann.

Gib die Differenz zwischen zwei Daten zurück

Wenn beide Argumente Datumsangaben sind, dann $subtract Operator gibt die Differenz zwischen den beiden Daten in Millisekunden zurück.

Beispiel:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       start: 1, 
       end: 1,
       result: { 
         $subtract: [ "$end", "$start" ] } } 
         }
   ]
).pretty()

Ergebnis:

{
	"start" : ISODate("2021-01-03T00:00:00Z"),
	"end" : ISODate("2021-01-03T23:30:15.100Z"),
	"result" : NumberLong(84615100)
}

Wenn wir die Daten umstellen, wird das Ergebnis ein negativer Wert:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       start: 1, 
       end: 1,
       result: { 
         $subtract: [ "$start", "$end" ] } } 
         }
   ]
).pretty()

Ergebnis:

{
	"start" : ISODate("2021-01-03T00:00:00Z"),
	"end" : ISODate("2021-01-03T23:30:15.100Z"),
	"result" : NumberLong(-84615100)
}

Übergeben der falschen Anzahl von Argumenten

Der $subtract Der Operator akzeptiert genau zwei Argumente. Das Übergeben der falschen Anzahl von Argumenten führt zu einem Fehler.

Beispiel:

db.data.aggregate(
   [
     { $project: { 
       result: { 
         $subtract: [ "$a" ] } } 
         }
   ]
)

Ergebnis:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "Invalid $project :: caused by :: Expression $subtract takes exactly 2 arguments. 1 were passed in.",
	"code" : 16020,
	"codeName" : "Location16020"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Übergabe von Nullwerten

Übergeben von zwei null Werte ergibt null zurückgegeben.

Beispiel:

db.data.aggregate(
   [
     { $project: { 
       result: { 
         $subtract: [ null, null ] } } 
         }
   ]
)

Ergebnis:

{ "_id" : 1, "result" : null }