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.