Di MongoDB, $add
operator pipa agregasi menambahkan nilai bersama-sama. Nilai tersebut dapat berupa angka, atau dapat berupa angka dan tanggal.
$add
operator menerima nilai sebagai argumen. Argumen dapat berupa ekspresi apa pun yang valid selama argumen tersebut menghasilkan semua angka atau angka dan tanggal.
Contoh Data
Misalkan kita memiliki koleksi yang disebut data
dengan dokumen sebagai berikut:
{ "_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") }
Tambahkan Nomor
Kita dapat menggunakan $add
operator untuk menambahkan a
dan b
bidang bersama-sama.
Contoh:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$add: [ "$a", "$b" ] } }
}
]
)
Hasil:
{ "a" : 100, "b" : 50, "result" : 150 } { "a" : 20000, "b" : 15, "result" : 20015 } { "a" : 1700, "b" : 3, "result" : 1703 }
Menambahkan Angka dengan Tanggal
Jika salah satu argumen adalah tanggal, argumen lainnya diperlakukan sebagai milidetik untuk ditambahkan ke tanggal.
Contoh:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
c: 1,
result: {
$add: [ "$a", "$c" ] } }
}
]
).pretty()
Hasil:
{ "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") }
Kita dapat melihat bahwa nilai numerik dalam a
bidang telah ditambahkan sebagai milidetik ke c
lapangan.
Lebih Banyak Argumen
Contoh sebelumnya menambahkan dua nilai bersama-sama, tetapi Anda dapat menambahkan lebih banyak jika diperlukan.
Berikut ini contoh menambahkan ketiga bidang bersama-sama:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
c: 1,
result: {
$add: [ "$a", "$b", "$c" ] } }
}
]
).pretty()
Hasil:
{ "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") }
Kali ini, kedua nomor ditambahkan ke tanggal.
Hanya Satu Tanggal yang Diizinkan
Meskipun Anda dapat menambahkan banyak ekspresi bersama-sama, Anda hanya dapat menyertakan satu tanggal. Melewati beberapa tanggal menghasilkan kesalahan.
Contoh:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
c: 1,
result: {
$add: [ "$c", ISODate("2020-09-24T10:45:01.007Z") ] } }
}
]
).pretty()
Hasil:
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
Tidak Menyampaikan Argumen
Tidak meneruskan argumen ke $add
menghasilkan 0
dikembalikan.
Contoh:
db.data.aggregate(
[
{ $project: {
result: {
$add: [ ] } }
}
]
)
Hasil:
{ "_id" : 1, "result" : 0 } { "_id" : 2, "result" : 0 } { "_id" : 3, "result" : 0 }
Meneruskan Nilai Null
Melewati null
menghasilkan null
.
Contoh:
db.data.aggregate(
[
{ $project: {
result: {
$add: [ null ] } }
}
]
)
Hasil:
{ "_id" : 1, "result" : null } { "_id" : 2, "result" : null } { "_id" : 3, "result" : null }