Apakah ada bidang yang harus dimiliki semua dokumen di mongodb

MongoDB adalah database NoSQL berorientasi dokumen yang tersedia untuk umum. Kami dapat memperbarui dokumen dalam koleksi menggunakan berbagai metode seperti memperbarui, mengganti, dan menyimpan. Untuk mengubah kolom tertentu pada dokumen, kami akan menggunakan operator yang berbeda seperti $set, $inc, dll

Dalam tutorial ini, kita akan belajar memodifikasi beberapa bidang dokumen menggunakan kueri pembaruan dan penggantian. Untuk tujuan demonstrasi, pertama-tama kita akan membahas kueri shell mongo dan kemudian penerapannya yang sesuai di Java

Sekarang mari kita lihat berbagai metode untuk mencapai tujuan tersebut

2. Permintaan Shell untuk Memperbarui Bidang Berbeda

Sebelum kita mulai, mari kita buat terlebih dahulu database baru, baeldung, dan kumpulan sampel, karyawan. Kami akan menggunakan koleksi ini di semua contoh

use baeldung; db.createCollection(employee);

Sekarang mari tambahkan beberapa dokumen ke dalam koleksi ini menggunakan kueri insertMany

db.employee.insertMany([ { "employee_id": 794875, "employee_name": "David Smith", "job": "Sales Representative", "department_id": 2, "salary": 20000, "hire_date": NumberLong("1643969311817") }, { "employee_id": 794876, "employee_name": "Joe Butler", "job": "Sales Manager", "department_id": 3, "salary": 30000, "hire_date": NumberLong("1645338658000") } ]);_

Hasilnya, kita akan mendapatkan JSON dengan ObjectId untuk kedua dokumen tersebut seperti yang ditunjukkan di bawah ini

{ "acknowledged": true, "insertedIds": [ ObjectId("6211e034b76b996845f3193d"), ObjectId("6211e034b76b996845f3193e") ] }

Sejauh ini, kami telah menyiapkan lingkungan yang diperlukan. Sekarang mari perbarui dokumen yang baru saja kita sisipkan

2. 1. Perbarui Beberapa Bidang dari Satu Dokumen

Kita dapat menggunakan operator $set dan $inc untuk memperbarui bidang apa pun di MongoDB. Operator $set akan menetapkan nilai yang baru ditentukan sedangkan operator $inc akan meningkatkan nilai dengan nilai yang ditentukan

Pertama-tama mari kita lihat kueri MongoDB untuk memperbarui dua bidang koleksi karyawan menggunakan operator $set

db.employee.updateOne( { "employee_id": 794875, "employee_name": "David Smith" }, { $set:{ department_id:3, job:"Sales Manager" } } );

Dalam kueri di atas, kolom employee_id dan employee_name digunakan untuk memfilter dokumen dan operator $set digunakan untuk memperbarui kolom job dan department_id

Kita juga dapat menggunakan operator $set dan $inc secara bersamaan dalam satu kueri pembaruan

db.employee.updateOne( { "employee_id": 794875 }, { $inc: { department_id: 1 }, $set: { job: "Sales Manager" } } );_

Ini akan memperbarui bidang pekerjaan ke Manajer Penjualan dan menambah department_id sebesar 1

2. 2. Perbarui Beberapa Bidang dari Banyak Dokumen

Selain itu, kami juga dapat memperbarui banyak bidang lebih dari satu dokumen di MongoDB. Kami hanya perlu memasukkan opsi multi. true untuk mengubah semua dokumen yang cocok dengan kriteria kueri filter

db.employee.update( { "job": "Sales Representative" }, { $inc: { salary: 10000 }, $set: { department_id: 5 } }, { multi: true } );

Alternatifnya, kita akan mendapatkan hasil yang sama menggunakan kueri updateMany

db.employee.updateMany( { "job": "Sales Representative" }, { $inc: { salary: 10000 }, $set: { department_id: 5 } } );_

Dalam kueri di atas, kami menggunakan metode updateMany untuk memperbarui lebih dari 1 dokumen koleksi

2. 3. Masalah Umum Saat Memperbarui Banyak Bidang

Sejauh ini, kami telah belajar untuk memperbarui banyak bidang menggunakan kueri pembaruan dengan menyediakan dua operator berbeda atau menggunakan satu operator di banyak bidang

Sekarang, jika kita menggunakan operator berkali-kali dengan bidang yang berbeda dalam satu kueri, MongoDB hanya akan memperbarui pernyataan terakhir dari kueri pembaruan dan mengabaikan sisanya

db.employee.updateMany( { "employee_id": 794875 }, { $set: { department_id: 3 }, $set: { job:"Sales Manager" } } );

Kueri di atas akan mengembalikan output yang mirip dengan ini

{ "acknowledged":true, "matchedCount":1, "modifiedCount":1 }_

Dalam hal ini, satu-satunya tugas akan diperbarui menjadi "Manajer Penjualan". Nilai department_id tidak akan diperbarui ke 3

3. Perbarui Bidang dengan Driver Java

Sejauh ini, kami telah membahas kueri MongoDB mentah. Sekarang mari kita lakukan operasi yang sama menggunakan Java. Driver Java MongoDB mendukung dua kelas untuk mewakili dokumen MongoDB, com. mongodb. BasicDBObject dan org. bson. Dokumen. Kami akan melihat kedua metode untuk memperbarui bidang dalam dokumen

Sebelum kita melanjutkan, mari kita hubungkan terlebih dahulu ke employee collection di dalam baeldung DB

MongoClient mongoClient = new MongoClient(new MongoClientURI("localhost", 27017); MongoDatabase database = mongoClient.getDatabase("baeldung"); MongoCollection<Document> collection = database.getCollection("employee");_

Di sini kami berasumsi bahwa MongoDB berjalan secara lokal di port default 27017

3. 1. Menggunakan DBObject

Untuk membuat dokumen di MongoDB, kami akan menggunakan com. mongodb. Antarmuka DBObject dan kelas implementasinya com. mongodb. Objek BasicDBO

Implementasi DBObject didasarkan pada key-value pair. BasicDBObject diwariskan dari kelas LinkedHashMap yang ada di dalam paket util

Sekarang mari kita gunakan com. mongodb. BasicDBObject untuk melakukan operasi update di beberapa kolom

db.employee.insertMany([ { "employee_id": 794875, "employee_name": "David Smith", "job": "Sales Representative", "department_id": 2, "salary": 20000, "hire_date": NumberLong("1643969311817") }, { "employee_id": 794876, "employee_name": "Joe Butler", "job": "Sales Manager", "department_id": 3, "salary": 30000, "hire_date": NumberLong("1645338658000") } ]);_0

Di sini, pertama, kami membuat kueri filter berdasarkan employee_id. Operasi ini akan mengembalikan satu set dokumen. Selanjutnya, kami telah memperbarui nilai department_id dan pekerjaan sesuai dengan kueri yang ditetapkan

3. 2. Menggunakan Dokumen bson

Kami dapat melakukan semua operasi MongoDB menggunakan dokumen bson. Untuk itu, pertama-tama kita membutuhkan objek koleksi dan kemudian melakukan operasi pembaruan menggunakan metode updateMany dengan fungsi filter dan set

db.employee.insertMany([ { "employee_id": 794875, "employee_name": "David Smith", "job": "Sales Representative", "department_id": 2, "salary": 20000, "hire_date": NumberLong("1643969311817") }, { "employee_id": 794876, "employee_name": "Joe Butler", "job": "Sales Manager", "department_id": 3, "salary": 30000, "hire_date": NumberLong("1645338658000") } ]);_1

Di sini, kami meneruskan filter kueri ke metode updateMany. Filter eq cocok dengan employee_id dengan teks yang sama persis '794875'. Kemudian, kami memperbarui id_departemen dan pekerjaan menggunakan operator yang ditetapkan

4. Menggunakan Ganti Kueri

Pendekatan naif untuk memperbarui beberapa bidang dokumen adalah menggantinya dengan dokumen baru yang memiliki nilai yang diperbarui

Misalnya, jika kita ingin mengganti dokumen dengan employee_id 794875, kita dapat menjalankan kueri berikut

db.employee.insertMany([ { "employee_id": 794875, "employee_name": "David Smith", "job": "Sales Representative", "department_id": 2, "salary": 20000, "hire_date": NumberLong("1643969311817") }, { "employee_id": 794876, "employee_name": "Joe Butler", "job": "Sales Manager", "department_id": 3, "salary": 30000, "hire_date": NumberLong("1645338658000") } ]);_2

Perintah di atas akan mencetak JSON pengakuan dalam output

{ "acknowledged":true, "matchedCount":1, "modifiedCount":1 }_

Di sini, kolom employee_id digunakan untuk memfilter dokumen. Argumen kedua dari kueri pembaruan menunjukkan dokumen dari mana dokumen yang ada akan diganti

Dalam kueri di atas, kami melakukan replaceOne, karenanya, ini hanya akan mengganti satu dokumen dengan filter itu. Sebagai alternatif, jika kita ingin mengganti semua dokumen dengan kueri filter tersebut, maka kita perlu menggunakan metode updateMany

5. Kesimpulan

Pada artikel ini, kami menjelajahi berbagai cara untuk memperbarui banyak bidang dokumen di MongoDB. Kami secara luas membahas dua implementasi, menggunakan shell MongoDB dan menggunakan driver Java

Ada berbagai opsi untuk memperbarui beberapa kolom dokumen termasuk $inc dan $set operator

Apa bidang default di MongoDB?

Secara default, MongoDB membuat indeks unik pada bidang_id selama pembuatan koleksi. Kolom _id selalu menjadi kolom pertama dalam dokumen. Jika server menerima dokumen yang tidak memiliki field _id terlebih dahulu, maka server akan memindahkan field tersebut ke awal.

Berapa jumlah maksimum bidang pada dokumen MongoDB?

Tidak boleh ada lebih dari 32 bidang dalam indeks gabungan.

Bagaimana cara memilih satu bidang untuk semua dokumen dalam koleksi MongoDB?

Anda dapat memilih satu bidang di MongoDB menggunakan sintaks berikut. db. NamaKoleksiAnda. temukan({"namaFieldanda". NilaiAnda},{"NamaSingleFieldAnda". 1,_id. 0});

Apa struktur data internal dari dokumen MongoDB?

Data yang disimpan di MongoDB adalah dalam format dokumen BSON. Di sini, BSON adalah representasi Biner dari dokumen JSON. Atau dengan kata lain, di backend, server MongoDB mengubah data JSON menjadi bentuk biner yang dikenal sebagai BSON dan BSON ini disimpan dan dikueri dengan lebih efisien

Postingan terbaru

LIHAT SEMUA