Saya pikir saya mengetahuinya setelah memeriksa dokumen mongo. Pada dasarnya, ada ada perbedaan semantik antara keduanya. Pada dasarnya, dalam bentuk pertama dari kueri {c: {d: d1}}
, mongo mengasumsikan bahwa Anda menentukan seluruh subdokumen. Jadi jika Anda memiliki subdokumen {c: {d: d1, e: e1}}
, itu tidak akan cocok.
OTOH, bentuk kedua dari query {'c.d': d1}
menyiratkan Anda hanya menentukan kecocokan pada satu bidang dalam subdokumen. Ini akan cocok bahkan jika subdokumen memiliki bidang lain atau seluruh subdokumen.
Perbedaan ini meluas ke indeks. _ensureIndex({c: 1})
dan _ensureIndex({'c.d': 1})
adalah dua indeks yang berbeda, dan meskipun yang pertama mengindeks seluruh subdokumen, itu tidak akan digunakan jika Anda melakukan kueri pada bidang individual dengan c.d
notasi.