Panduan untuk MongoDB dengan Java

1. Gambaran keseluruhan

Dalam artikel ini, kita akan melihat integrasi MongoDB, pangkalan data sumber terbuka NoSQL yang sangat popular dengan klien Java yang berdiri sendiri.

MongoDB ditulis dalam C ++ dan mempunyai sebilangan besar ciri kukuh seperti peta-mengurangkan, auto-sharding, replikasi, ketersediaan tinggi dll.

2. MongoDB

Mari kita mulakan dengan beberapa perkara penting mengenai MongoDB itu sendiri:

  • menyimpan data dalam dokumen seperti JSON yang boleh mempunyai pelbagai struktur
  • menggunakan skema dinamik, yang bermaksud bahawa kita dapat membuat rekod tanpa menentukan apa-apa
  • struktur rekod boleh diubah hanya dengan menambahkan medan baru atau menghapus yang sudah ada

Model data yang disebutkan di atas memberi kita kemampuan untuk mewakili hubungan hierarki, menyimpan susunan dan struktur lain yang lebih kompleks dengan mudah.

3. Terminologi

Memahami konsep dalam MongoDB menjadi lebih mudah jika kita dapat membandingkannya dengan struktur pangkalan data hubungan.

Mari lihat analogi antara Mongo dan sistem MySQL tradisional:

  • Jadual di MySQL menjadi Koleksi di Mongo
  • Row menjadi Dokumen
  • Tiang menjadi Medan
  • Gabungan ditakrifkan sebagai pautan dan dokumen tertanam

Ini adalah kaedah sederhana untuk melihat konsep teras MongoDB, tetapi tetap berguna.

Sekarang, mari kita selami pelaksanaan untuk memahami pangkalan data yang hebat ini.

4. Pergantungan Maven

Kita perlu memulakan dengan menentukan ketergantungan Pemacu Java untuk MongoDB:

 org.mongodb mongo-java-driver 3.4.1  

Untuk memeriksa sama ada versi perpustakaan baru telah dikeluarkan - jejak siarannya di sini.

5. Menggunakan MongoDB

Sekarang, mari mulakan pelaksanaan pertanyaan Mongo dengan Java. Kami akan mengikuti operasi CRUD asas kerana ini adalah yang terbaik untuk dimulakan.

5.1. Buat Sambungan Dengan Pelanggan Mongo

Pertama, mari buat sambungan ke pelayan MongoDB. Dengan versi> = 2.10.0, kami akan menggunakan MongoClient :

MongoClient mongoClient = new MongoClient("localhost", 27017);

Dan untuk versi yang lebih lama gunakan kelas Mongo :

Mongo mongo = new Mongo("localhost", 27017);

5.2. Menyambung ke Pangkalan Data

Sekarang, mari kita sambungkan ke pangkalan data kami. Sangat menarik untuk diperhatikan bahawa kita tidak perlu membuatnya. Apabila Mongo melihat bahawa pangkalan data tidak ada, ia akan membuatnya untuk kami:

DB database = mongoClient.getDB("myMongoDb");

Kadang-kadang, secara lalai, MongoDB berjalan dalam mod yang disahkan. Sekiranya demikian, kita perlu mengesahkan semasa menyambung ke pangkalan data.

Kita boleh melakukannya seperti yang ditunjukkan di bawah:

MongoClient mongoClient = new MongoClient(); DB database = mongoClient.getDB("myMongoDb"); boolean auth = database.authenticate("username", "pwd".toCharArray());

5.3. Tunjukkan Pangkalan Data Sedia Ada

Mari paparkan semua pangkalan data yang ada. Apabila kita ingin menggunakan baris perintah, sintaks untuk menunjukkan pangkalan data serupa dengan MySQL:

show databases;

Di Jawa, kami memaparkan pangkalan data menggunakan potongan di bawah:

mongoClient.getDatabaseNames().forEach(System.out::println);

Hasilnya adalah:

local 0.000GB myMongoDb 0.000GB

Di atas, tempatan adalah pangkalan data Mongo lalai.

5.4. Buat Koleksi

Mari mulakan dengan membuat Koleksi (setara jadual untuk MongoDB) untuk pangkalan data kami. Setelah kami menyambung ke pangkalan data kami, kami dapat membuat Koleksi sebagai:

database.createCollection("customers", null);

Sekarang, mari kita paparkan semua koleksi yang ada untuk pangkalan data semasa:

database.getCollectionNames().forEach(System.out::println);

Hasilnya adalah:

customers

5.5. Simpan - Masukkan

The save operation has save-or-update semantics: if an id is present, it performs an update, if not – it does an insert.

When we save a new customer:

DBCollection collection = database.getCollection("customers"); BasicDBObject document = new BasicDBObject(); document.put("name", "Shubham"); document.put("company", "Baeldung"); collection.insert(document);

The entity will be inserted into a database:

{ "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"), "name" : "Shubham", "company" : "Baeldung" }

Next, we’ll look at the same operation – save – with update semantics.

5.6. Save – Update

Let’s now look at save with update semantics, operating on an existing customer:

{ "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"), "name" : "Shubham", "company" : "Baeldung" }

Now, when we save the existing customer – we will update it:

BasicDBObject query = new BasicDBObject(); query.put("name", "Shubham"); BasicDBObject newDocument = new BasicDBObject(); newDocument.put("name", "John"); BasicDBObject updateObject = new BasicDBObject(); updateObject.put("$set", newDocument); collection.update(query, updateObject);

The database will look like this:

{ "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"), "name" : "John", "company" : "Baeldung" }

As you can see, in this particular example, save uses the semantics of update, because we use object with given _id.

5.7. Read a Document From a Collection

Let's search for a Document in a Collection by making a query:

BasicDBObject searchQuery = new BasicDBObject(); searchQuery.put("name", "John"); DBCursor cursor = collection.find(searchQuery); while (cursor.hasNext()) { System.out.println(cursor.next()); }

It will show the only Document we have by now in our Collection:

[ { "_id" : ObjectId("33a52bb7830b8c9b233b4fe6"), "name" : "John", "company" : "Baeldung" } ]

5.8. Delete a Document

Let's move forward to our last CRUD operation, deletion:

BasicDBObject searchQuery = new BasicDBObject(); searchQuery.put("name", "John"); collection.remove(searchQuery);

With above command executed, our only Document will be removed from the Collection.

6. Conclusion

This article was a quick introduction to using MongoDB from Java.

Pelaksanaan semua contoh dan coretan kod ini boleh didapati di GitHub - ini adalah projek berasaskan Maven, jadi mudah diimport dan dijalankan sebagaimana adanya.