MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Indeks subdokumen dalam mongo

Anda dapat melakukan keduanya :

> db.collection.ensureIndex({"data.name": 1,"data.age":1, "data.job" : 1})
> db.collection.ensureIndex({"data": 1})

Ini dibahas dalam dokumentasi di bawah indexes-on-embedded-fields dan indeks pada sub dokumen

Bagian penting dari bagian sub dokumen adalah 'Saat melakukan pencocokan kesetaraan pada subdokumen, urutan bidang penting dan subdokumen harus sama persis.'

Ini berarti bahwa 2 indeks adalah sama untuk kueri sederhana .

Namun, seperti yang ditunjukkan oleh contoh sub-dokumen, Anda bisa mendapatkan beberapa hasil menarik (yang mungkin tidak Anda harapkan) jika Anda hanya mengindeks seluruh sub-dokumen sebagai lawan dari bidang tertentu dan kemudian melakukan operator perbandingan (seperti $gte ) - jika Anda mengindeks sub bidang tertentu, Anda mendapatkan indeks yang kurang fleksibel, tetapi berpotensi lebih berguna.

Itu semua tergantung pada kasus penggunaan Anda.

Bagaimanapun, setelah Anda membuat indeks, Anda dapat memeriksa apa yang dibuat dengan :

> db.collection.getIndexes()
[
{
    "v" : 1,
    "key" : {
        "_id" : 1
    },
    "ns" : "test.collection",
    "name" : "_id_"
},
{
    "v" : 1,
    "key" : {
        "data.name" : 1,
        "data.age" : 1,
        "data.job" : 1
    },
    "ns" : "test.collection",
    "name" : "data.name_1_data.age_1_data.job_1"
}

]

Seperti yang Anda lihat dari output, ia membuat kunci baru yang disebut data.name_1_data.age_1_data.job_1 (_id_ indeks selalu dibuat).

Jika Anda ingin menguji indeks baru Anda, Anda dapat melakukan :

> db.collection.insert({data:{name: "A",age:"B", job : "C"}})
> db.collection.insert({data:{name: "A1",age:"B", job : "C"}})
> db.collection.find({"data.name" : "A"}).explain()
{
    "cursor" : "BtreeCursor data.name_1_data.age_1_data.job_1",
     .... more stuff

Hal utama adalah Anda dapat melihat bahwa indeks baru Anda telah digunakan (BtreeCursor data.name_1_data.age_1_data.job_1 di bidang kursor adalah apa yang menunjukkan hal ini terjadi). Jika Anda melihat "cursor" : "BasicCursor" , maka indeks Anda tidak digunakan.

Untuk informasi lebih detail lihat di sini.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Agregat $lookup tidak mengembalikan elemen urutan array asli

  2. Bagaimana Anda meminta tidak nol di Mongo?

  3. DB dengan kinerja sisipan/detik terbaik?

  4. Model.find().toArray() mengklaim tidak memiliki metode .toArray()

  5. MongoDB:Bagaimana cara memperbarui banyak dokumen dengan satu perintah?