1. Pendahuluan
Dalam tutorial ini, kita akan melihat BSON dan bagaimana kita dapat menggunakannya untuk berinteraksi dengan MongoDB.
Sekarang, deskripsi mendalam tentang MongoDB dan semua kemampuannya berada di luar cakupan artikel ini. Namun, akan berguna untuk memahami beberapa konsep kunci.
MongoDB adalah mesin penyimpanan dokumen NoSQL terdistribusi. Dokumen disimpan sebagai data BSON dan dikelompokkan bersama ke dalam koleksi. Dokumen dalam koleksi dianalogikan dengan baris dalam tabel database relasional .
Untuk tampilan yang lebih mendalam, lihat artikel pengantar MongoDB.
2. Apa itu BSON ?
BSON adalah singkatan dari Binary JSON . Ini adalah protokol untuk serialisasi biner dari data mirip JSON.
JSON adalah format pertukaran data yang populer di layanan web modern. Ini memberikan cara yang fleksibel untuk mewakili struktur data yang kompleks.
BSON memberikan beberapa keuntungan dibandingkan menggunakan JSON biasa:
- Ringkas:Dalam kebanyakan kasus, menyimpan struktur BSON membutuhkan lebih sedikit ruang daripada yang setara dengan JSON
- Tipe Data:BSON menyediakan tipe data tambahan tidak ditemukan di JSON biasa, seperti Tanggal dan BinData
Salah satu manfaat utama menggunakan BSON adalah mudah dilintasi . Dokumen BSON berisi metadata tambahan yang memungkinkan manipulasi kolom dokumen dengan mudah, tanpa harus membaca seluruh dokumen itu sendiri.
3. Driver MongoDB
Sekarang setelah kita memiliki pemahaman dasar tentang BSON dan MongoDB, mari kita lihat bagaimana menggunakannya bersama-sama. Kami akan fokus pada tindakan utama dari akronim CRUD (C makan, R ea, U pdate, H elete).
MongoDB menyediakan driver perangkat lunak untuk sebagian besar bahasa pemrograman modern. Driver dibuat di atas perpustakaan BSON , yang berarti kita akan bekerja langsung dengan BSON API saat membuat kueri. Untuk informasi lebih lanjut, lihat panduan kami untuk bahasa kueri MongoDB.
Di bagian ini, kita akan melihat penggunaan driver untuk terhubung ke cluster, dan menggunakan BSON API untuk melakukan berbagai jenis kueri. Perhatikan bahwa driver MongoDB menyediakan Filter class yang dapat membantu kita menulis kode yang lebih ringkas. Namun, untuk tutorial ini, kami hanya akan fokus menggunakan API BSON inti.
Sebagai alternatif untuk menggunakan driver MongoDB dan BSON secara langsung, lihat panduan Spring Data MongoDB kami.
3.1. Menghubungkan
Untuk memulai, pertama-tama kita tambahkan driver MongoDB sebagai dependensi ke dalam aplikasi kita:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>3.10.1</version>
</dependency>
Kemudian kita membuat koneksi ke database dan koleksi MongoDB:
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection<Document> collection = database.getCollection("employees");
Bagian selanjutnya akan membahas pembuatan kueri menggunakan koleksi referensi.
3.2. Sisipkan
Katakanlah kita memiliki JSON berikut yang ingin kita sisipkan sebagai dokumen baru ke dalam karyawan koleksi:
{
"first_name" : "Joe",
"last_name" : "Smith",
"title" : "Java Developer",
"years_of_service" : 3,
"skills" : ["java","spring","mongodb"],
"manager" : {
"first_name" : "Sally",
"last_name" : "Johanson"
}
}
Contoh JSON ini menunjukkan tipe data paling umum yang akan kita temui dengan dokumen MongoDB:teks, numerik, array, dan dokumen yang disematkan.
Untuk menyisipkan ini menggunakan BSON, kami akan menggunakan Dokumen MongoDB API:
Document employee = new Document()
.append("first_name", "Joe")
.append("last_name", "Smith")
.append("title", "Java Developer")
.append("years_of_service", 3)
.append("skills", Arrays.asList("java", "spring", "mongodb"))
.append("manager", new Document()
.append("first_name", "Sally")
.append("last_name", "Johanson"));
collection.insertOne(employee);
Dokumen class adalah API utama yang digunakan di BSON. Ini memperluas Peta Java Java antarmuka dan berisi beberapa metode yang kelebihan beban. Hal ini memudahkan untuk bekerja dengan tipe asli serta objek umum seperti ID objek, tanggal, dan daftar.
3.3. Temukan
Untuk menemukan dokumen di MongoDB, kami menyediakan dokumen pencarian yang menentukan bidang mana yang akan ditanyakan. Misalnya, untuk menemukan semua dokumen yang memiliki nama belakang “Smith”, kita akan menggunakan dokumen JSON berikut:
{
"last_name": "Smith"
}
Ditulis dalam BSON ini akan menjadi:
Document query = new Document("last_name", "Smith");
List results = new ArrayList<>();
collection.find(query).into(results);
Kueri “Temukan” dapat menerima beberapa bidang dan perilaku defaultnya adalah menggunakan logika dan operator untuk menggabungkannya. Ini berarti hanya dokumen yang cocok dengan semua bidang yang akan dikembalikan .
Untuk menyiasatinya, MongoDB menyediakan atau operator kueri:
{
"$or": [
{ "first_name": "Joe" },
{ "last_name":"Smith" }
]
}
Ini akan menemukan semua dokumen yang memiliki nama depan "Joe" atau nama belakang "Smith". Untuk menulis ini sebagai BSON, kami akan menggunakan Dokumen bersarang seperti query insert di atas:
Document query =
new Document("$or", Arrays.asList(
new Document("last_name", "Smith"),
new Document("first_name", "Joe")));
List results = new ArrayList<>();
collection.find(query).into(results);
3.4. Perbarui
Kueri pembaruan sedikit berbeda di MongoDB karena memerlukan dua dokumen :
- Kriteria filter untuk menemukan satu atau beberapa dokumen
- Dokumen pembaruan yang menentukan bidang mana yang akan diubah
Misalnya, kita ingin menambahkan keterampilan "keamanan" ke setiap karyawan yang sudah memiliki keterampilan "pegas". Dokumen pertama akan menemukan semua karyawan dengan keterampilan "musim semi", dan yang kedua akan menambahkan entri "keamanan" baru ke susunan keterampilan mereka.
Di JSON, dua kueri ini akan terlihat seperti:
{
"skills": {
$elemMatch: {
"$eq": "spring"
}
}
}
{
"$push": {
"skills": "security"
}
}
Dan di BSON, mereka akan menjadi:
Document query = new Document(
"skills",
new Document(
"$elemMatch",
new Document("$eq", "spring")));
Document update = new Document(
"$push",
new Document("skills", "security"));
collection.updateMany(query, update);
3.5. Hapus
Hapus kueri di MongoDB menggunakan sintaks yang sama seperti kueri pencarian. Kami hanya menyediakan dokumen yang menentukan satu atau beberapa kriteria untuk dicocokkan.
Misalnya, katakanlah kami menemukan bug di database karyawan kami dan secara tidak sengaja membuat karyawan a dengan nilai negatif selama bertahun-tahun bekerja. Untuk menemukan semuanya, kami akan menggunakan JSON berikut:
{
"years_of_service" : {
"$lt" : 0
}
}
Dokumen BSON yang setara adalah:
Document query = new Document(
"years_of_service",
new Document("$lt", 0));
collection.deleteMany(query);