Mengapa mongodb menggunakan _id?

Dalam tutorial ini, kita akan melihat melakukan operasi kueri menggunakan ID Dokumen di MongoDB. MongoDB menyediakan operator pencarian untuk membuat kueri dokumen dari koleksi

Dalam tutorial ini, pertama-tama kita akan melihat dokumen kueri menggunakan ID Dokumen dalam kueri MongoDB Shell dan kemudian menggunakan kode driver Java

2. Apa ID Dokumen dari Dokumen MongoDB?

Sama seperti sistem manajemen basis data lainnya, MongoDB membutuhkan pengidentifikasi unik untuk setiap dokumen yang disimpan dalam koleksi. Pengidentifikasi unik ini bertindak sebagai kunci utama untuk koleksi

Di MongoDB, ID terdiri dari 12 byte

  • stempel waktu 4-byte yang mewakili pembuatan ID yang diukur dalam hitungan detik sejak zaman Unix
  • nilai yang dihasilkan acak 5-byte yang unik untuk mesin dan proses
  • pencacah pertambahan 3-byte

Di MongoDB, ID disimpan di bidang bernama _id dan dihasilkan oleh klien. Oleh karena itu, ID harus dibuat sebelum mengirim dokumen ke database. Di sisi klien, kita bisa menggunakan driver-generated ID atau membuat custom ID

Pengidentifikasi unik disimpan di kelas ObjectId. Kelas ini menyediakan metode kemudahan untuk mendapatkan data yang disimpan dalam ID tanpa benar-benar menguraikannya. MongoDB akan menambahkan bidang _id dan menetapkan ObjectId unik untuk dokumen jika _id tidak ditentukan saat memasukkan dokumen

3. Inisialisasi Basis Data

Pertama, mari kita siapkan database baru baeldung dan koleksi sampel, kendaraan

use baeldung;
db.createCollection("vehicle");

Selanjutnya, mari tambahkan beberapa dokumen ke dalam koleksi dengan menggunakan metode insertMany

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
_

Jika penyisipan berhasil, perintah di atas akan mencetak JSON yang mirip dengan yang ditunjukkan di bawah ini

{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("62d01d17cdd1b7c8a5f945b9"),
        ObjectId("62d01d17cdd1b7c8a5f945ba"),
        ObjectId("62d01d17cdd1b7c8a5f945bb")
    ]
}

Kami telah berhasil mengatur database dan koleksi. Kami akan menggunakan database dan koleksi ini untuk semua contoh

4. Menggunakan Shell MongoDB

Kami akan menggunakan db. koleksi. metode find(query, projection) untuk menanyakan dokumen dari MongoDB

Pertama, mari tulis kueri yang akan mengembalikan semua dokumen pengumpulan kendaraan

db.vehicle.find({});

Kueri di atas mengembalikan semua dokumen

{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945b9"), "companyName" : "Skoda",
    "modelName" : "Octavia", "launchYear" : 2016, "type" : "Sports", "registeredNo" : "SKO 1134" }
{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945ba"), "companyName" : "BMW",
    "modelName" : "X5", "launchYear" : 2020, "type" : "SUV", "registeredNo" : "BMW 3325" }
{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945bb"), "companyName" : "Mercedes",
    "modelName" : "Maybach", "launchYear" : 2021, "type" : "Luxury", "registeredNo" : "MER 9754" }
_

Selanjutnya, mari tulis kueri untuk mengambil dokumen pengumpulan kendaraan menggunakan ID yang dikembalikan pada hasil di atas

db.vehicle.find(
{
    "_id": ObjectId("62d01d17cdd1b7c8a5f945b9")
});

Kueri di atas mengembalikan dokumen koleksi kendaraan dengan _id sama dengan ObjectId(“62d01d17cdd1b7c8a5f945b9”)

{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945b9"), "companyName" : "Skoda",
    "modelName" : "Octavia", "launchYear" : 2016, "type" : "Sports", "registeredNo" : "SKO 1134" }
_

Selain itu, kami dapat mengambil beberapa dokumen pengumpulan kendaraan menggunakan ID dengan operator kueri

db.vehicle.find(
{
    "_id": {
        $in: [
            ObjectId("62d01d17cdd1b7c8a5f945b9"),
            ObjectId("62d01d17cdd1b7c8a5f945ba"),
            ObjectId("62d01d17cdd1b7c8a5f945bb")
        ]
    }
});

Kueri di atas mengembalikan semua dokumen pengumpulan kendaraan untuk ID yang dikueri di dalam operator

{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945b9"), "companyName" : "Skoda",
    "modelName" : "Octavia", "launchYear" : 2016, "type" : "Sports", "registeredNo" : "SKO 1134" }
{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945ba"), "companyName" : "BMW",
    "modelName" : "X5", "launchYear" : 2020, "type" : "SUV", "registeredNo" : "BMW 3325" }
{ "_id" : ObjectId("62d01d17cdd1b7c8a5f945bb"), "companyName" : "Mercedes",
    "modelName" : "Maybach", "launchYear" : 2021, "type" : "Luxury", "registeredNo" : "MER 9754" }
_

Demikian pula, salah satu operator kueri dapat digunakan sebagai filter untuk metode find() dengan ID yang akan dikueri

Selain itu, penting untuk diperhatikan bahwa saat melakukan kueri dokumen dengan kolom _id, nilai string ID Dokumen harus ditetapkan sebagai ObjectId() dan bukan String

Mari coba kueri dokumen yang ada dengan ID sebagai nilai String

db.vehicle.find(
{
    "_id": "62d01d17cdd1b7c8a5f945b9"
});
_

Sayangnya, kueri di atas tidak akan mengembalikan dokumen apa pun karena tidak ada dokumen dengan ID sebagai nilai String 62d01d17cdd1b7c8a5f945b9

5. Menggunakan Driver Java

Sejauh ini, kita telah mempelajari cara membuat kueri dokumen menggunakan ID dengan MongoDB Shell. Sekarang mari kita implementasikan hal yang sama menggunakan driver MongoDB Java

Sebelum melakukan operasi update, pertama-tama mari kita hubungkan ke koleksi kendaraan di baeldung database

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
_0

Di sini, dalam hal ini, kami terhubung ke MongoDB, yang berjalan di port default 27017 di localhost

Pertama, mari tulis kode ke dokumen kueri menggunakan ID

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
_1

Di sini, kami melewatkan filter Bson sebagai parameter ke metode find() dengan kolom _id untuk melakukan kueri. Cuplikan di atas akan mengembalikan dokumen pengumpulan kendaraan di mana _id sama dengan ObjectId(“62d01d17cdd1b7c8a5f945b9”)

Selanjutnya, mari kita menulis sebuah potongan untuk menanyakan dokumen dengan beberapa ID

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
_2

Kueri di atas mengembalikan semua dokumen pengumpulan kendaraan untuk ID yang diminta

Terakhir, mari coba kueri koleksi kendaraan dengan ID yang dibuat oleh pengemudi

db.vehicle.insertMany([
{
    "companyName":"Skoda", 
    "modelName":"Octavia",
    "launchYear":2016,
    "type":"Sports",
    "registeredNo":"SKO 1134"
},
{ 
    "companyName":"BMW",
    "modelName":"X5",
    "launchYear":2020,
    "type":"SUV",
    "registeredNo":"BMW 3325"
},
{
    "companyName":"Mercedes",
    "modelName":"Maybach",
    "launchYear":2021,
    "type":"Luxury",
    "registeredNo":"MER 9754"
}]);
_3

Kueri di atas tidak akan mengembalikan dokumen apa pun karena dokumen dengan ID yang baru dibuat tidak akan ada dalam koleksi kendaraan

6. Kesimpulan

Pada artikel ini, kita telah mempelajari cara membuat kueri dokumen menggunakan ID Dokumen di MongoDB. Pertama-tama, kami melihat kasus penggunaan ini dalam kueri MongoDB Shell, lalu kami membahas kode driver Java yang sesuai

Apa tujuan _id di MongoDB?

_id adalah kunci utama pada elemen dalam koleksi ; . _id secara otomatis diindeks. Pencarian menentukan { _id.

Bisakah saya mengubah _id di MongoDB?

Jika demikian, jawabannya adalah ya, Anda dapat menyetel properti _id ke nilai jenis apa pun kecuali array , per https. //dokumen. mongodb. com/manual/core/dokumen/.

Apa perbedaan antara ID dan _id?

Perbedaannya dapat dipahami dengan mengikuti, Bidang _id adalah kunci utama untuk setiap dokumen. Ini disebut _id dan juga dapat diakses melalui id . Mencoba menggunakan kunci id dapat mengakibatkan kesalahan format ObjectId ilegal.

Apa itu _id dari tipe ObjectId?

Bidang “_id” dapat digunakan dalam format apa pun dan format defaultnya adalah ObjectId dari dokumen. ObjectID adalah jenis Field Of BSON 12-byte . 4 byte pertama yang mewakili Unix Timestamp dokumen . 3 byte berikutnya adalah Id mesin tempat server MongoDB berjalan .