Dans MongoDB, le $add
l'opérateur de pipeline d'agrégation ajoute des valeurs ensemble. Ces valeurs peuvent être des nombres, ou elles peuvent être des nombres et une date.
Le $add
L'opérateur accepte les valeurs comme arguments. Les arguments peuvent être n'importe quelle expression valide tant qu'ils résolvent soit tous les nombres, soit des nombres et une date.
Exemple de données
Supposons que nous ayons une collection appelée data
avec les pièces suivantes :
{ "_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") }
Ajouter des numéros
Nous pouvons utiliser le $add
opérateur pour ajouter le a
et b
champs ensemble.
Exemple :
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$add: [ "$a", "$b" ] } }
}
]
)
Résultat :
{ "a" : 100, "b" : 50, "result" : 150 } { "a" : 20000, "b" : 15, "result" : 20015 } { "a" : 1700, "b" : 3, "result" : 1703 }
Ajouter des numéros avec une date
Si l'un des arguments est une date, les autres arguments sont traités comme des millisecondes à ajouter à la date.
Exemple :
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
c: 1,
result: {
$add: [ "$a", "$c" ] } }
}
]
).pretty()
Résultat :
{ "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") }
Nous pouvons voir que les valeurs numériques dans le a
le champ a été ajouté en millisecondes au c
champ.
Plus d'arguments
Les exemples précédents additionnent deux valeurs, mais vous pouvez en ajouter d'autres si nécessaire.
Voici un exemple d'addition des trois champs :
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
c: 1,
result: {
$add: [ "$a", "$b", "$c" ] } }
}
]
).pretty()
Résultat :
{ "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") }
Cette fois, les deux chiffres ont été ajoutés à la date.
Une seule date autorisée
Bien que vous puissiez ajouter plusieurs expressions ensemble, vous ne pouvez inclure qu'une seule date. Passer plusieurs dates entraîne une erreur.
Exemple :
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
c: 1,
result: {
$add: [ "$c", ISODate("2020-09-24T10:45:01.007Z") ] } }
}
]
).pretty()
Résultat :
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
Passer aucun argument
Ne passer aucun argument à $add
donne 0
être retourné.
Exemple :
db.data.aggregate(
[
{ $project: {
result: {
$add: [ ] } }
}
]
)
Résultat :
{ "_id" : 1, "result" : 0 } { "_id" : 2, "result" : 0 } { "_id" : 3, "result" : 0 }
Passer des valeurs nulles
Passer null
donne null
.
Exemple :
db.data.aggregate(
[
{ $project: {
result: {
$add: [ null ] } }
}
]
)
Résultat :
{ "_id" : 1, "result" : null } { "_id" : 2, "result" : null } { "_id" : 3, "result" : null }