Myslím, že jsem na to přišel po kontrole mongo dokumentů. V podstatě existuje rozdíl v sémantice mezi těmito dvěma. V podstatě v první formě dotazu {c: {d: d1}} , mongo předpokládá, že zadáváte celý vnořený dokument. Pokud tedy máte vnořený dokument {c: {d: d1, e: e1}} , nebude to odpovídat.
OTOH, druhá forma dotazu {'c.d': d1} znamená, že zadáváte shodu pouze v jednom poli vnořeného dokumentu. To by odpovídalo, i když má vnořený dokument další pole nebo celé vnořené vnořené dokumenty.
Tento rozdíl se vztahuje i na index. _ensureIndex({c: 1}) a _ensureIndex({'c.d': 1}) jsou dva různé indexy, a přestože první indexuje celý vnořený dokument, nebude použit, pokud se dotazujete na jednotlivé pole pomocí c.d notace.