Di MongoDB, Anda dapat menggunakan $push
operator untuk menambahkan nilai ke array.
Anda dapat menggunakan berbagai pengubah untuk menentukan posisi nilai dalam larik, urutan elemen dalam larik, menambahkan beberapa nilai, dll.
Contoh
Misalkan kita memiliki koleksi yang disebut products
dengan dokumen sebagai berikut:
db.products.find()
Hasil:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Topi" , "ukuran" :[ "S", "L", "XL" ] }{ "_id" :3, "produk" :"Tutup", "ukuran" :[ "M", "L" ] }Dan katakanlah kita ingin menambahkan nilai ke array di dokumen 3.
Kita bisa menggunakan
$push
dalam hubungannya denganupdate()
untuk menambahkan nilai:db.products.update( { _id: 3 }, { $push: { sizes: "XL" } } )
Keluaran:
WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })Mari kita lihat kembali koleksinya untuk memverifikasi perubahannya:
db.products.find()
Hasil:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Topi" , "ukuran" :[ "S", "L", "XL" ] }{ "_id" :3, "produk" :"Tutup", "ukuran" :[ "M", "L", "XL" ] }Masukkan Nilai pada Posisi Tertentu
Anda dapat menggunakan
$each
dan$position
pengubah untuk menentukan di mana nilai harus dimasukkan ke dalam array.Misalnya, kita dapat menggunakan nilai
0
untuk menyisipkannya di awal array.Contoh:
db.products.update( { _id: 3 }, { $push: { sizes: { $each: [ "S" ], $position: 0 } } } )
Keluaran:
WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })
$each
pengubah menambahkan beberapa nilai ke bidang array. Dalam hal ini kami hanya memasukkan satu nilai ke array, namun, untuk menggunakan$position
pengubah, itu harus muncul dengan$each
pengubah.Yuk cek lagi koleksinya:
db.products.find()
Hasil:
{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Topi" , "ukuran" :[ "S", "L", "XL" ] }{ "_id" :3, "produk" :"Tutup", "ukuran" :[ "S", "M", "L" , "XL" ] }Tambahkan dan Urutkan
Misalkan kita memiliki koleksi dengan dokumen-dokumen berikut:
db.players.find()
Hasil:
{ "_id" :1, "skor" :[ 1, 5, 3 ] }{ "_id" :2, "skor" :[ 8, 17, 18 ] }{ "_id" :3, "skor " :[ 15, 11, 8 ] }Dan misalkan kita ingin menambahkan beberapa nilai ke array di dokumen 3, tetapi kita juga ingin mengurutkan array dalam urutan menaik setelah kita menambahkan nilainya.
Kita bisa melakukan ini:
db.players.update( { _id: 3 }, { $push: { scores: { $each: [ 5, 12 ], $sort: 1 } } } )
Keluaran:
WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })Sekarang ketika kita melihat koleksinya, kita dapat melihat bahwa dokumen ketiga telah dimodifikasi sesuai dengan itu.
db.players.find()
Hasil:
{ "_id" :1, "skor" :[ 1, 5, 3 ] }{ "_id" :2, "skor" :[ 8, 17, 18 ] }{ "_id" :3, "skor " :[ 5, 8, 11, 12, 15 ] }Untuk mengurutkannya dalam urutan menurun, gunakan
$sort: -1
.Iris Array
Anda dapat menggunakan
$slice
modifier untuk membatasi jumlah elemen dalam array.Misalnya, mari tambahkan nilai lain ke larik, lalu potong larik ke sejumlah elemen tertentu.
db.players.update( { _id: 3 }, { $push: { scores: { $each: [ 3 ], $slice: 3 } } } )
Keluaran:
WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })Sekarang mari kita periksa kembali koleksinya:
db.players.find()
Hasil:
{ "_id" :1, "skor" :[ 1, 5, 3 ] }{ "_id" :2, "skor" :[ 8, 17, 18 ] }{ "_id" :3, "skor " :[ 5, 8, 11 ] }Dalam hal ini, array diiris, tetapi nilai yang kami tambahkan bahkan tidak berakhir di array terakhir. Ini karena nilai telah ditambahkan ke array dan kami tidak menggunakan
$sort
operasi, sehingga nilainya tetap berada di akhir larik sebelum larik diiris ke tiga elemen pertamanya.Ini dia lagi, kecuali kali ini dengan
$sort
pengubah.db.players.update( { _id: 3 }, { $push: { scores: { $each: [ 3 ], $sort: 1, $slice: 3 } } } )
Keluaran:
WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })Cek koleksinya:
db.players.find()
Hasil:
{ "_id" :1, "skor" :[ 1, 5, 3 ] }{ "_id" :2, "skor" :[ 8, 17, 18 ] }{ "_id" :3, "skor " :[ 3, 5, 8 ] }Tambahkan Nilai hanya jika Tidak Ada
Jika Anda ingin nilai ditambahkan hanya jika belum ada dalam larik, pertimbangkan untuk menggunakan
$addToSet
operator.