Saya memiliki jenis data berikut (disederhanakan sedikit dari kasus asli saya) di MongoDB:
{
"name":"some name",
"attrs":[
{"n":"subject","v":"Some subject"},
{"n":"description","v":"Some great description"},
{"n":"comments","v":"Comments are here!"},
]
}
Array attrs adalah wadah untuk atribut dinamis, yaitu saya sebelumnya tidak tahu apa jenis atribut yang diletakkan di sana. n singkatan nama dan v singkatan nilai.
Buku MongoDB In Action menggambarkan ini sebagai solusi untuk memiliki atribut dinamis dalam kasus di mana atribut benar-benar dapat diprediksi. Ini juga menjelaskan bahwa Anda dapat mengindeks seperti ini:
db.mycollection.ensureIndex({"attrs.n":1, "attrs.v":1})
Pertanyaan kemudian dapat dilakukan seperti ini:
db.mycollection.find({attrs: {$elemMatch: {n: "subject", v: "Some subject"}}})
Ketika saya menguji ini, saya mendapatkan kinerja yang sangat buruk. Saya diuji dengan koleksi saya memiliki 2 juta dokumen dan tidak memiliki indeks tampaknya berkinerja lebih baik.
Jadi, pertanyaannya, apakah ada cara untuk mengindeks pengaturan atribut dinamis semacam ini sehingga pengindeksan memberikan kinerja yang baik? Dalam kasus saya, tidak layak hanya memiliki kunci seperti "subjek" dan "deskripsi" dan mengindeks semuanya ...