sql >> Database >  >> NoSQL >> MongoDB

MongoDB $add

In MongoDB, de $add aggregatiepijplijnoperator voegt waarden samen. Dergelijke waarden kunnen getallen zijn, of het kunnen getallen en een datum zijn.

De $add operator accepteert de waarden als argumenten. De argumenten kunnen elke geldige uitdrukking zijn, zolang ze maar worden opgelost in alle getallen of in getallen en een datum.

Voorbeeldgegevens

Stel dat we een verzameling hebben met de naam data met de volgende documenten:

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

Nummers toevoegen

We kunnen de $add . gebruiken operator om de a . toe te voegen en b velden samen.

Voorbeeld:

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

Resultaat:

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

Getallen met een datum toevoegen

Als een van de argumenten een datum is, worden de andere argumenten behandeld als milliseconden om bij de datum op te tellen.

Voorbeeld:

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

Resultaat:

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

We kunnen zien dat de numerieke waarden in de a veld zijn toegevoegd als milliseconden aan de c veld.

Meer argumenten

In de vorige voorbeelden worden twee waarden bij elkaar opgeteld, maar u kunt er meer toevoegen indien nodig.

Hier is een voorbeeld van het optellen van alle drie de velden:

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

Resultaat:

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

Deze keer zijn beide nummers toegevoegd aan de datum.

Slechts één datum toegestaan

Hoewel u veel uitdrukkingen bij elkaar kunt voegen, kunt u slechts één datum opnemen. Het passeren van meerdere datums resulteert in een fout.

Voorbeeld:

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

Resultaat:

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

Geen argumenten doorgeven

Geen argumenten doorgeven aan $add resulteert in 0 wordt geretourneerd.

Voorbeeld:

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

Resultaat:

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

Nulwaarden doorgeven

Doorgeven van null resulteert in null .

Voorbeeld:

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

Resultaat:

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


  1. Kan iemand het redis setbit-commando uitleggen?

  2. Afbeelding geretourneerd door REST API wordt altijd weergegeven als defect

  3. Hoe hideIndex() werkt in MongoDB

  4. MongoDB $toString