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.