sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $add

I MongoDB er $add aggregeringspipeline-operatør tilføjer værdier sammen. Sådanne værdier kan være tal, eller de kan være tal og en dato.

$add operatoren accepterer værdierne som argumenter. Argumenterne kan være et hvilket som helst gyldigt udtryk, så længe de løses til enten alle tal eller til tal og en dato.

Eksempel på data

Antag, at vi har en samling kaldet data med følgende dokumenter:

{
	"_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")
}

Tilføj numre

Vi kan bruge $add operatør for at tilføje a og b felter sammen.

Eksempel:

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 }

Tilføj tal med en dato

Hvis et af argumenterne er en dato, behandles de andre argumenter som millisekunder for at føje til datoen.

Eksempel:

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, at de numeriske værdier i a feltet er blevet tilføjet som millisekunder til c felt.

Flere argumenter

De foregående eksempler lægger to værdier sammen, men du kan tilføje flere, hvis det kræves.

Her er et eksempel på at lægge alle tre felter sammen:

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")
}

Denne gang blev begge tal tilføjet til datoen.

Kun én dato tilladt

Selvom du kan tilføje mange udtryk sammen, kan du kun inkludere én dato. Overgang af flere datoer resulterer i en fejl.

Eksempel:

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

Ikke bestået nogen argumenter

Sender ingen argumenter til $add resulterer i 0 bliver returneret.

Eksempel:

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

Resultat:

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

Bestå nulværdier

Sender null resulterer i null .

Eksempel:

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

Resultat:

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


  1. Mongoose returnerer udefineret for et eksisterende felt

  2. MongoDB - Opdater eller indsæt objekt i array

  3. Bedste Redis-bibliotek til Java

  4. Redis og Node.js og Socket.io spørgsmål