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 }