В MongoDB, $add
операторът на тръбопровода за агрегиране добавя стойности заедно. Такива стойности могат да бъдат числа или числа и дата.
$add
операторът приема стойностите като аргументи. Аргументите могат да бъдат всеки валиден израз, стига да се разрешават или до всички числа, или до числа и дата.
Примерни данни
Да предположим, че имаме колекция, наречена data
със следните документи:
{ "_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") }
Добавяне на числа
Можем да използваме $add
оператор за добавяне на a
и b
полета заедно.
Пример:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$add: [ "$a", "$b" ] } }
}
]
)
Резултат:
{ "a" : 100, "b" : 50, "result" : 150 } { "a" : 20000, "b" : 15, "result" : 20015 } { "a" : 1700, "b" : 3, "result" : 1703 }
Добавяне на числа с дата
Ако един от аргументите е дата, другите аргументи се третират като милисекунди за добавяне към датата.
Пример:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
c: 1,
result: {
$add: [ "$a", "$c" ] } }
}
]
).pretty()
Резултат:
{ "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") }
Можем да видим, че числовите стойности в a
полето е добавено като милисекунди към c
поле.
Още аргументи
Предишните примери добавят две стойности заедно, но можете да добавите още, ако е необходимо.
Ето пример за добавяне на трите полета заедно:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
c: 1,
result: {
$add: [ "$a", "$b", "$c" ] } }
}
]
).pretty()
Резултат:
{ "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") }
Този път и двете числа бяха добавени към датата.
Разрешена е само една дата
Въпреки че можете да добавите много изрази заедно, можете да включите само една дата. Предаването на няколко дати води до грешка.
Пример:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
c: 1,
result: {
$add: [ "$c", ISODate("2020-09-24T10:45:01.007Z") ] } }
}
]
).pretty()
Резултат:
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
Не се предават аргументи
Не се предават аргументи на $add
води до 0
се връща.
Пример:
db.data.aggregate(
[
{ $project: {
result: {
$add: [ ] } }
}
]
)
Резултат:
{ "_id" : 1, "result" : 0 } { "_id" : 2, "result" : 0 } { "_id" : 3, "result" : 0 }
Предаване на нулеви стойности
Предаването на null
води до null
.
Пример:
db.data.aggregate(
[
{ $project: {
result: {
$add: [ null ] } }
}
]
)
Резултат:
{ "_id" : 1, "result" : null } { "_id" : 2, "result" : null } { "_id" : 3, "result" : null }