Operator $push dan $pull adalah bagian dari operator array yang dirancang untuk memodifikasi array dalam dokumen MongoDB. Dalam tutorial ini, saya akan menunjukkan cara kerja operator push dan pull dan cara menggunakannya dengan pengubah dan kondisi tambahan
(Artikel ini adalah bagian dari Panduan MongoDB kami. Gunakan menu sebelah kanan untuk menavigasi. )
Apa itu operator push dan pull?
Dorong dan Tarik adalah dua operasi yang digunakan untuk menambah dan menghapus elemen dari array dalam dokumen MongoDB. Elemen push dan pull dilakukan masing-masing menggunakan operator MongoDB $push dan $pull
- Operator $push menambahkan nilai tertentu ke array
- Operator $pull menghapus nilai dari array yang cocok dengan kondisi tertentu
Sintaks dasar operator $push
{ $push: { <field1>: <value1>, .. } }Sintaks dasar dari operator $pull
{ $pull: { <field1>: <value|condition>, .. } }_Mari kita lihat masing-masing secara lebih mendetail, termasuk cara kerjanya dan bagaimana Anda dapat menggunakannya
Bagaimana operator MongoDB $push bekerja
Anda dapat melihat operator $push mengambil dua argumen
- Bidang larik
- Nilai yang akan ditambahkan ke bidang larik yang ditentukan
Jika bidang array tidak ada dalam dokumen, operator $push akan membuat bidang array baru. Namun, jika kolom yang ditentukan bukan array, MongoDB akan mengembalikan error
pengubah operator $push
Fungsionalitas operator $push dapat diperluas lebih lanjut menggunakan pengubah berikut
- $masing-masing. Pengubah $each digunakan untuk menambahkan beberapa nilai ke array. Jika operator $each tidak ditentukan, semua nilai dalam operator $push akan ditambahkan sebagai item tunggal ke bidang larik dalam dokumen
- $irisan. Ini membatasi jumlah elemen dalam array. Namun, ini harus digunakan bersamaan dengan pengubah $each
- $sort. Pengubah $sort mengurutkan item dalam array. Pengubah ini juga membutuhkan penggunaan $each pengubah
- $posisi. Operator $push menambahkan item baru ke akhir array secara default. Gunakan pengubah $position jika Anda ingin secara eksplisit menentukan lokasi tempat item harus ditambahkan
Operasi $push dilakukan dalam urutan berikut, terlepas dari urutan pengubah yang didefinisikan
- Perbarui array untuk menambahkan elemen di posisi yang ditentukan
- Urutkan array jika pengubah $sort ditentukan
- Iris array jika pengubah $slice ditentukan
- Menyimpan array
Selanjutnya, kita akan melihat bagaimana kita dapat menggunakan operasi MongoDB $push untuk memanipulasi dokumen. Saya akan menunjukkan beberapa contoh, jadi lompatlah ke contoh yang Anda butuhkan
Untuk kumpulan data dasar untuk contoh ini, saya akan menggunakan koleksi "vehicledetails".
db.vehicledetails.find().pretty()Hasil
Tambahkan satu nilai ke array
Mari kita lihat bagaimana kita bisa menambahkan nilai tunggal ke sebuah array ketika field array ada, dan itu tidak ada. Dalam semua contoh, kolom “_id” digunakan untuk menunjukkan dokumen mana yang harus ditambahkan array
Contoh. Tidak Ada Bidang Larik
Bidang array baru akan dibuat dengan nama bidang yang ditentukan dalam operator $push
db.vehicledetails.update({"_id": ObjectId("5fbc52f05f9a62418038240d")}, {$push: {"vehicle_colours": "red"}})Hasil
Contoh. Ketika Bidang array hadir
Item baru akan ditambahkan di akhir array
db.vehicledetails.update({"_id": ObjectId("5fbc52f05f9a62418038240d")}, {$push: {"vehicle_colours": "green"}})_Hasil
Jika kami mencoba menggunakan operator $push untuk bidang non-array, itu akan menghasilkan kesalahan. Kode berikut mengembalikan kesalahan saat kami mencoba menambahkan nilai ke bidang non-array "make"
db.vehicledetails.update({"_id": ObjectId("5fbc52f05f9a62418038240d")}, {$push: {"make": "green"}})Hasil
Tambahkan Banyak Nilai ke Array
Anda dapat menambahkan beberapa nilai ke array dengan atau tanpa pengubah $each
Contoh. Beberapa Nilai tanpa $setiap pengubah
Jika pengubah $each tidak ada, MongoDB akan menambahkan semua nilai sebagai nilai tunggal ke bidang larik yang ditentukan
db.vehicledetails.update({"_id": ObjectId("5fbc52f55f9a62418038240e")}, {$push: {"vehicle_colours": ["blue", "red", "yellow"]}})_Hasil
Di sini, Anda dapat melihat "biru", "merah", dan "kuning" adalah elemen dari array yang baru dibuat. Tapi larik itu hanyalah salah satu elemen dari larik “vehical_colours”.
Contoh. Beberapa Nilai dengan $setiap pengubah
Ketika operasi $push didefinisikan dengan pengubah $each, setiap elemen dalam operasi $push akan ditambahkan ke array sebagai item individual
db.vehicledetails.update({"_id": ObjectId("5fbc52f55f9a62418038240e")}, {$push: {"vehicle_colours": { $each :["blue", "red", "yellow"]}}})Hasil
Di sini, "vehicle_colours" memiliki tiga elemen setelah operasi $push
Menggunakan Pengubah $sort dan $slice
Pada bagian ini, kami akan mendemonstrasikan cara menggunakan pengubah $sort dan $slice menggunakan dokumen berikut dalam koleksi "vehicledetails"
Mari kita tambahkan warna "perak" ke kolom array "vehicle_colours" dan urutkan isinya menurut abjad (urutan menaik)
db.vehicledetails.update({"_id": ObjectId("5fbc52fb5f9a62418038240f")}, {$push: {"vehicle_colours": { $each :["silver", "orange"], $sort: 1}}})_Hasil
Output di atas menunjukkan kepada kita bahwa warna baru telah ditambahkan, dan larik telah diurutkan menurut abjad. Dalam contoh berikut, kami akan menambahkan warna "biru tua" ke bidang array sambil mengurutkan berdasarkan abjad dan menggunakan pengubah $slice untuk membatasi array menjadi 5 elemen
db.vehicledetails.update({"_id": ObjectId("5fbc52fb5f9a62418038240f")}, {$push: {"vehicle_colours": { $each :["dark blue"], $sort: 1, $slice: 5}}})_Hasil
Menggunakan Pengubah $position
Pengubah $position digunakan untuk menentukan lokasi dalam array di mana item baru harus ditambahkan. Ini akan mengesampingkan perilaku default menambahkan item ke akhir array
Pada contoh berikut, kita akan menambahkan warna “putih” di awal kolom array “vehicle_colours”. Dalam pengubah "$position", nol (0) digunakan untuk menunjukkan posisi pertama (indeks 0) dari array
{ $pull: { <field1>: <value|condition>, .. } }_0Hasil
Cara kerja operator $pull MongoDB
Operator $pull digunakan untuk menghapus semua contoh nilai atau nilai dari dokumen MongoDB yang cocok dengan kondisi yang ditentukan. Jika array berisi dokumen yang disematkan atau disarangkan, kondisi operator $pull yang ditentukan akan diterapkan ke setiap elemen array seolah-olah setiap elemen array adalah dokumen dalam kumpulan
Ketika nilai yang ditentukan untuk dihapus adalah array, operator $pull hanya menghapus elemen dalam array yang cocok dengan nilai persis yang ditentukan, termasuk urutan elemen didefinisikan. Jika nilai yang ditentukan untuk dihapus adalah dokumen, operator $pull akan menghapus elemen yang cocok dengan bidang dan nilai yang ditentukan. Dalam contoh ini urutan bidang dibuang
Sekarang saya akan memandu Anda melalui beberapa contoh operator $pull. Lompat ke yang Anda butuhkan
Dalam contoh ini, kami akan menggunakan kumpulan data berikut untuk menunjukkan
Hapus satu item dari array
Di sini, kami akan menghapus nilai tunggal "2018" dari kolom array "model_year". Kolom “_id” digunakan untuk menunjukkan dokumen tempat operasi $pull harus dilakukan
{ $pull: { <field1>: <value|condition>, .. } }_1Hasil
Hapus Semua Item yang Sama dengan Nilai yang Ditentukan
Dalam contoh ini, kami akan menggunakan koleksi "vehicledetails" untuk menghapus warna "biru" dan "hijau" dari kolom array "vehicle_colours" dan menghapus model tahun 2020 dari kolom array "model_year"
{ $pull: { <field1>: <value|condition>, .. } }_2Hasil
Hapus Item yang Cocok dengan Kondisi $pull yang Ditentukan
Dengan menggunakan koleksi “student_grades”, mari kita buat kondisi untuk menghapus semua nilai yang kurang dari atau sama dengan 50 dari dokumen berikut
Dokumen yang Tidak Dimodifikasi
Dokumen yang Dimodifikasi
{ $pull: { <field1>: <value|condition>, .. } }_3Hasil
Kondisi yang ditentukan ({$lte. 50}) menghapus item apa pun yang kurang dari atau sama dengan 50 di bidang larik “nilai”.
Hapus Item dari Array Dokumen
Dalam contoh ini, kita akan menggunakan koleksi “student_grades” untuk menghapus semua nilai yang kurang dari atau sama dengan 50 di kolom array “grades” di semua dokumen dalam koleksi
Koleksi yang Tidak Dimodifikasi
Koleksi yang Dimodifikasi
{ $pull: { <field1>: <value|condition>, .. } }_4Hasil
Keluaran di atas menunjukkan kepada kita bahwa nilai apa pun yang kurang dari atau sama dengan 50 telah dihapus dari bidang larik "nilai" di semua dokumen dalam koleksi "tingkat_student"