sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $add

I MongoDB, $add aggregeringspipelineoperatör lägger till värden tillsammans. Sådana värden kan vara siffror, eller de kan vara siffror och ett datum.

$add operatorn accepterar värdena som argument. Argumenten kan vara vilket giltigt uttryck som helst så länge de löser sig till antingen alla siffror eller till siffror och ett datum.

Exempeldata

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

{
	"_id" : 1,
	"a" : 100,
	"b" : 50,
	"c" : ISODate("2021-01-03T23:30:15.100Z")
}
{
	"_id" : 2,
	"a" : 20000,
	"b" : 15,
	"c" : ISODate("2019-12-08T04:00:20.112Z")
}
{
	"_id" : 3,
	"a" : 1700,
	"b" : 3,
	"c" : ISODate("2020-09-24T10:45:01.007Z")
}

Lägg till nummer

Vi kan använda $add operatör för att lägga till a och b fält tillsammans.

Exempel:

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

Resultat:

{ "a" : 100, "b" : 50, "result" : 150 }
{ "a" : 20000, "b" : 15, "result" : 20015 }
{ "a" : 1700, "b" : 3, "result" : 1703 }

Lägg till nummer med ett datum

Om ett av argumenten är ett datum, behandlas de andra argumenten som millisekunder att lägga till datumet.

Exempel:

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

Resultat:

{
	"a" : 100,
	"c" : ISODate("2021-01-03T23:30:15.100Z"),
	"result" : ISODate("2021-01-03T23:30:15.200Z")
}
{
	"a" : 20000,
	"c" : ISODate("2019-12-08T04:00:20.112Z"),
	"result" : ISODate("2019-12-08T04:00:40.112Z")
}
{
	"a" : 1700,
	"c" : ISODate("2020-09-24T10:45:01.007Z"),
	"result" : ISODate("2020-09-24T10:45:02.707Z")
}

Vi kan se att de numeriska värdena i a fältet har lagts till som millisekunder till c fältet.

Fler argument

De tidigare exemplen lägger till två värden, men du kan lägga till fler om det behövs.

Här är ett exempel på att lägga till alla tre fälten tillsammans:

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

Resultat:

{
	"a" : 100,
	"b" : 50,
	"c" : ISODate("2021-01-03T23:30:15.100Z"),
	"result" : ISODate("2021-01-03T23:30:15.250Z")
}
{
	"a" : 20000,
	"b" : 15,
	"c" : ISODate("2019-12-08T04:00:20.112Z"),
	"result" : ISODate("2019-12-08T04:00:40.127Z")
}
{
	"a" : 1700,
	"b" : 3,
	"c" : ISODate("2020-09-24T10:45:01.007Z"),
	"result" : ISODate("2020-09-24T10:45:02.710Z")
}

Den här gången lades båda siffrorna till datumet.

Endast ett datum tillåtet

Även om du kan lägga till många uttryck tillsammans, kan du bara inkludera ett datum. Att passera flera datum resulterar i ett fel.

Exempel:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       a: 1, 
       b: 1,
       c: 1, 
       result: { 
         $add: [ "$c", ISODate("2020-09-24T10:45:01.007Z") ] } } 
         }
   ]
).pretty()

Resultat:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "only one date allowed in an $add expression",
	"code" : 16612,
	"codeName" : "Location16612"
} : 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

Inga argument godkänns

Skickar inga argument till $add resulterar i 0 returneras.

Exempel:

db.data.aggregate(
   [
     { $project: { 
       result: { 
         $add: [  ] } } 
         }
   ]
)

Resultat:

{ "_id" : 1, "result" : 0 }
{ "_id" : 2, "result" : 0 }
{ "_id" : 3, "result" : 0 }

Godkänd nollvärden

Skickar null resulterar i null .

Exempel:

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

Resultat:

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


  1. MongoError:kunde inte ansluta till servern vid första anslutningen

  2. Mongodb aggregat:konvertera datum till en annan tidszon

  3. Hur du säkrar dina Open Source-databaser med ClusterControl

  4. MongoDB PHP UTF-8 problem