sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $subtrahera

I MongoDB kan du använda $subtract aggregeringspipelineoperatör för att subtrahera siffror och/eller datum.

Specifikt $subtract kan göra följande tre saker:

  • Subtrahera två tal för att returnera skillnaden
  • Subtrahera ett tal (i millisekunder) från ett datum och returnera det resulterande datumet
  • Subtrahera två datum för att returnera skillnaden i millisekunder

$subtract operatorn accepterar värdena som argument. Argumenten kan vara vilket giltigt uttryck som helst så länge de löser sig till siffror och/eller datum. För att subtrahera ett tal från ett datum måste datumet vara det första argumentet...

Exempeldata

Anta att vi har en samling som heter data med följande dokument:

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

Subtrahera siffror

Vi kan använda $subtract operatorn för att subtrahera a fältet från b fältet (eller vice versa).

Exempel:

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

Resultat:

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

Subtrahera ett tal från ett datum

Om det första argumentet är ett datum och det andra argumentet är ett tal, $subtract operatorn subtraherar talet från datumet i millisekunder.

Exempel:

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

Resultat:

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

Vi kan se att 250 millisekunder har subtraherats från datumet.

När vi subtraherar ett tal från ett datum måste datumet vara det första argumentet med talet som det andra argumentet.

Så här händer om vi byter argument:

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

Resultat:

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

Vi får ett felmeddelande som talar om för oss att det inte kan subtrahera ett datum från en dubbel.

Återställ skillnaden mellan två datum

Om båda argumenten är datum, då $subtract operatorn returnerar skillnaden mellan de två datumen i millisekunder.

Exempel:

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

Resultat:

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

Om vi ​​byter om datumen blir resultatet ett negativt värde:

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

Resultat:

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

Att passera fel antal argument

$subtract operatören accepterar exakt två argument. Att skicka fel antal argument resulterar i ett fel.

Exempel:

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

Resultat:

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

Godkänd nollvärden

Skickar två null värden resulterar i null returneras.

Exempel:

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

Resultat:

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

  1. Startar mongod fork, FEL:underordnad process misslyckades, avslutades med fel nummer 1

  2. Hur man modellerar ett likes-röstningssystem med MongoDB

  3. Docker compose spring boot redis anslutningsproblem

  4. MongoDB $vecka