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 }