In MongoDB ist die Datei $add
Aggregations-Pipeline-Operator fügt Werte zusammen. Solche Werte können Zahlen oder Zahlen und ein Datum sein.
Der $add
Operator akzeptiert die Werte als Argumente. Die Argumente können beliebige gültige Ausdrücke sein, solange sie entweder in alle Zahlen oder in Zahlen und ein Datum aufgelöst werden.
Beispieldaten
Angenommen, wir haben eine Sammlung namens data
mit folgenden Dokumenten:
{ "_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") }
Nummern hinzufügen
Wir können den $add
verwenden -Operator, um den a
hinzuzufügen und b
Felder zusammen.
Beispiel:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$add: [ "$a", "$b" ] } }
}
]
)
Ergebnis:
{ "a" : 100, "b" : 50, "result" : 150 } { "a" : 20000, "b" : 15, "result" : 20015 } { "a" : 1700, "b" : 3, "result" : 1703 }
Zahlen mit Datum hinzufügen
Wenn eines der Argumente ein Datum ist, werden die anderen Argumente als Millisekunden behandelt, die dem Datum hinzugefügt werden.
Beispiel:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
c: 1,
result: {
$add: [ "$a", "$c" ] } }
}
]
).pretty()
Ergebnis:
{ "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") }
Wir können sehen, dass die numerischen Werte im a
Feld wurden als Millisekunden zum c
hinzugefügt Feld.
Weitere Argumente
Die vorherigen Beispiele addieren zwei Werte zusammen, aber Sie können bei Bedarf weitere hinzufügen.
Hier ist ein Beispiel für das Zusammenfügen aller drei Felder:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
c: 1,
result: {
$add: [ "$a", "$b", "$c" ] } }
}
]
).pretty()
Ergebnis:
{ "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") }
Diesmal wurden beide Zahlen zum Datum hinzugefügt.
Nur ein Datum erlaubt
Obwohl Sie viele Ausdrücke zusammenfügen können, können Sie nur ein Datum einbeziehen. Das Übergeben mehrerer Datumsangaben führt zu einem Fehler.
Beispiel:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
c: 1,
result: {
$add: [ "$c", ISODate("2020-09-24T10:45:01.007Z") ] } }
}
]
).pretty()
Ergebnis:
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
Keine Argumente übergeben
Keine Argumente an $add
übergeben ergibt 0
zurückgegeben.
Beispiel:
db.data.aggregate(
[
{ $project: {
result: {
$add: [ ] } }
}
]
)
Ergebnis:
{ "_id" : 1, "result" : 0 } { "_id" : 2, "result" : 0 } { "_id" : 3, "result" : 0 }
Übergabe von Nullwerten
Übergabe von null
ergibt null
.
Beispiel:
db.data.aggregate(
[
{ $project: {
result: {
$add: [ null ] } }
}
]
)
Ergebnis:
{ "_id" : 1, "result" : null } { "_id" : 2, "result" : null } { "_id" : 3, "result" : null }