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 }