Perbarui array di mongodb node js

Selamat datang di postingan kedua dalam seri "MongoDB Animated 🍩" saya, di mana saya memberikan contoh animasi dan penjelasan untuk operasi MongoDB yang tidak ingin saya googling lagi

pengantar

Dalam posting ini, kami akan meninjau berbagai strategi untuk memperbarui elemen dari array tersemat

Saya akan menggunakan koleksi contoh yang sama yang digunakan di artikel sebelumnya di seri ini. Ini terdiri dari kumpulan sederhana "donut combos" dari toko donat. Setiap kombo memiliki nama dan rangkaian donat yang akan disertakan jika pelanggan memilih kombo tersebut. Berikut skema lengkapnya

// donutCombo Schema
{
    name: { type: String, required: true },
    active: { type: Boolean, required: true },
    donuts: [{
        color: { type: String },
        glazing: { type: Boolean }
    }]
}

Masuk ke mode layar penuh Keluar dari mode layar penuh

Memperbarui elemen

Memperbarui semua elemen dengan $[]

Menggunakan operator $set_ digabungkan dengan operator semua posisi

db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
0 memungkinkan kita memperbarui semua elemen array

Sebagai contoh, katakanlah kita ingin menghapus kaca dari semua donat di semua dokumen aktif

db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
_

Masuk ke mode layar penuh Keluar dari mode layar penuh

Perbarui array di mongodb node js

Operasi semacam ini bisa berguna saat Anda bermigrasi ke skema baru dan dokumen Anda memiliki larik tersemat. Misalnya, jika Anda perlu menambahkan properti baru dengan nilai default ke semua elemen array

Cara lain untuk menghapus kaca bisa dengan menghapus properti

db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
1 dari semua donat di semua dokumen aktif
Ini dapat dilakukan dengan menggunakan operator
db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
_2 yang dikombinasikan dengan semua operator posisi
db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
0

db.donutCombos.updateMany({ active: true }, { 
    $unset: { 
        'donuts.$[].glazing': 1 
    } 
});
_

Masuk ke mode layar penuh Keluar dari mode layar penuh

Perhatikan bahwa, di dalam objek

db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
_2, kita harus menentukan kunci (properti yang ingin kita hapus) dan nilainya, yang tidak memengaruhi operasi. Dalam hal ini, kami menggunakan "1", tetapi Anda juga dapat menggunakan string kosong, misalnya.
db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
_5

Memperbarui elemen pertama dengan $

Anda mungkin hanya perlu memperbarui elemen pertama dari array Anda. Dalam hal ini, Anda harus menggunakan operator posisi

db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
6. Operator posisi ini akan memungkinkan kita menerapkan perubahan pada elemen pertama yang cocok dengan
db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
7 (parameter pertama dari metode
db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
8). Bidang array harus menjadi bagian dari
db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
7

Dengan menggabungkan operator posisi

db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
_6 dengan $set, kita dapat memperbarui properti dari elemen larik pertama yang cocok dengan
db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
7 kita

Pada contoh berikut kita akan memperbarui donat putih pertama di setiap dokumen dan mengubah warnanya menjadi "merah muda"

db.donutCombos.updateMany({ 'donuts.color': 'white' }, { 
    $set: { 
        'donuts.$.color': 'pink'
    } 
});

Masuk ke mode layar penuh Keluar dari mode layar penuh

Perbarui array di mongodb node js

Operator posisi

db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
6 juga dapat digabungkan dengan
db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
2 untuk menghapus properti dari elemen larik pertama yang cocok dengan
db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
7 kita

Jadi untuk mencobanya, mari hilangkan warna dari donat putih pertama yang ditemukan di setiap dokumen

db.donutCombos.updateMany({ 'donuts.color': 'white' }, { 
    $unset: { 
        'donuts.$.color': 1 
    } 
});

Masuk ke mode layar penuh Keluar dari mode layar penuh

Perbarui array di mongodb node js

Updating elements that match a filter with $[]

Untuk memperbarui sekumpulan elemen yang cocok dengan filter tertentu, kita harus menggunakan operator posisi terfilter

db.donutCombos.updateMany({ active: true }, { 
    $unset: { 
        'donuts.$[].glazing': 1 
    } 
});
6 di mana
db.donutCombos.updateMany({ active: true }, { 
    $unset: { 
        'donuts.$[].glazing': 1 
    } 
});
7 adalah placeholder untuk nilai yang mewakili satu elemen array

Kita kemudian harus menggunakan parameter ketiga (opsi) dari metode

db.donutCombos.updateMany({ active: true }, { 
    $unset: { 
        'donuts.$[].glazing': 1 
    } 
});
8 untuk menentukan satu set
db.donutCombos.updateMany({ active: true }, { 
    $unset: { 
        'donuts.$[].glazing': 1 
    } 
});
9. Di sini kita akan menentukan kondisi yang harus dipenuhi oleh setiap elemen array yang ingin kita perbarui untuk diperbarui

Pada contoh selanjutnya, kita akan mengubah setiap warna putih donat menjadi hijau, hanya pada dokumen yang aktif

db.donutCombos.updateMany({ active: true }, { 
    $set: { 
        "donuts.$[donut].color": "green" 
    } 
}, 
{ 
    arrayFilters: [{ "donut.color": "white" }] 
});

Masuk ke mode layar penuh Keluar dari mode layar penuh

Perbarui array di mongodb node js

Menggabungkan operator posisi yang difilter

db.donutCombos.updateMany({ active: true }, { 
    $unset: { 
        'donuts.$[].glazing': 1 
    } 
});
6 (atau dalam contoh kita
db.donutCombos.updateMany({ 'donuts.color': 'white' }, { 
    $set: { 
        'donuts.$.color': 'pink'
    } 
});
1) dengan operator
db.donutCombos.updateMany({ active: true }, {  
    $set: {  
        'donuts.$[].glazing': false 
    }  
});
2, kita dapat menghapus properti dari semua elemen dalam array yang cocok dengan kriteria
db.donutCombos.updateMany({ 'donuts.color': 'white' }, { 
    $set: { 
        'donuts.$.color': 'pink'
    } 
});
3 kita

Misalnya, kami dapat menghapus warna setiap donat putih di setiap dokumen aktif

db.donutCombos.updateMany({ active: true }, { 
    $unset: { 
        "donuts.$[donut].color": 1
    } 
}, 
{ 
    arrayFilters: [{ "donut.color": "white" }] 
});

Masuk ke mode layar penuh Keluar dari mode layar penuh

Cobalah sendiri

Saya membuat repo untuk mencoba kueri MongoDB di memori menggunakan Node. js dengan driver Jest dan MongoDB Node. Saya menggunakan tes untuk menjalankan kueri dan memverifikasi bahwa semuanya telah diperbarui dengan benar. Saya juga menyertakan logger yang mencetak dokumen yang diperbarui di konsol yang menampilkan perubahan yang diterapkan menggunakan sintaks sorot diff

Perbarui array di mongodb node js

Anda dapat menemukan contoh yang saya sertakan dalam artikel ini di folder

db.donutCombos.updateMany({ 'donuts.color': 'white' }, { 
    $set: { 
        'donuts.$.color': 'pink'
    } 
});
4

pawap90 / try-mongodb-queries

Contoh proyek sederhana untuk mencoba kueri MongoDB di memori menggunakan Jest

try-mongodb-queries

Sebuah proyek sederhana untuk mencoba kueri MongoDB di memori menggunakan Jest. Termasuk logger yang mencatat perbedaan antara data pengujian asli dan data setelah pembaruan menggunakan penyorotan sintaks diff

Ketergantungan

Apa yang Anda butuhkan untuk menjalankan proyek ini

  • Node. js

(MongoDB tidak diperlukan karena akan berjalan di memori, ditangani oleh paket

db.donutCombos.updateMany({ 'donuts.color': 'white' }, { 
    $set: { 
        'donuts.$.color': 'pink'
    } 
});
5)

Cobalah

1. Instal dependensi

npm install

2. Jalankan tes

npm test

Peralatan

Alat utama yang digunakan dalam proyek ini

  • Pengandar Node MongoDB
  • Bersenda gurau
  • paket mongodb-memory-server oleh @nodkz

Lihat di GitHub

Sumber daya

Untuk info lebih lanjut tentang memperbarui array, berikut adalah beberapa sumber dari dokumen resmi MongoDB

  • Operator Pembaruan Array (dokumen. mongodb. com)

  • Perbarui Array dalam Dokumen (docs. mongodb. com)

Apakah postingan ini bermanfaat?

Saya tertarik dengan tanggapan Anda. Apakah postingan ini bermanfaat?

Bagaimana cara memperbarui array objek di MongoDB menggunakan node js?

Untuk memperbarui elemen larik pertama dari setiap dokumen yang cocok dengan kueri Anda, gunakan operator posisi $ . Operator posisi $ mereferensikan larik yang cocok dengan kueri. Anda tidak dapat menggunakan operator ini untuk mereferensikan array bersarang.

Bagaimana cara memperbarui array di MongoDB?

Anda dapat menggunakan metode updateOne() atau updateMany() untuk menambah, memperbarui, atau menghapus elemen larik berdasarkan kriteria yang ditentukan . Direkomendasikan untuk menggunakan metode updateMany() untuk memperbarui banyak array dalam sebuah koleksi.

Bagaimana cara memperbarui array bersarang di MongoDB?

Perbarui Nested Array Bersamaan dengan $[] . Berikut ini memperbarui nilai yang lebih besar dari atau sama dengan 8 di nilai bersarang. pertanyaan array jika terkait nilai. The $[] filtered positional operator, in conjunction with the $[] all positional operator, can be used to update nested arrays. The following updates the values that are greater than or equal to 8 in the nested grades. questions array if the associated grades.

Bagaimana cara memperbarui bidang di simpul JS MongoDB?

Anda dapat memperbarui catatan, atau dokumen seperti yang disebut di MongoDB, dengan menggunakan metode updateOne() . Parameter pertama dari metode updateOne() adalah objek kueri yang menentukan dokumen mana yang akan diperbarui. Catatan. Jika kueri menemukan lebih dari satu rekaman, hanya kejadian pertama yang diperbarui.