Мисля, че го разбрах, след като проверих документите на mongo. По принцип има разлика в семантиката между тези две. По същество в първата форма на заявката {c: {d: d1}}
, mongo приема, че посочвате цялото поддокумент. Така че, ако имате поддокумент {c: {d: d1, e: e1}}
, няма да съвпада.
OTOH, втората форма на заявката {'c.d': d1}
означава, че посочвате съвпадение само в едно поле в поддокумента. Това ще съответства дори ако поддокументът има други полета или цели под-поддокументи.
Тази разлика се простира до индекса. _ensureIndex({c: 1})
и _ensureIndex({'c.d': 1})
са два различни индекса и въпреки че първият индексира целия поддокумент, той няма да бъде използван, ако правите заявка в отделно поле с c.d
нотация.