Myślę, że zrozumiałem to po sprawdzeniu dokumentów mongo. Zasadniczo jest różnica w semantyce między tymi dwoma. Zasadniczo w pierwszej formie zapytania {c: {d: d1}}
, mongo zakłada, że określasz całość poddokument. Więc jeśli masz poddokument {c: {d: d1, e: e1}}
, nie będzie pasować.
OTOH, druga forma zapytania {'c.d': d1}
oznacza, że określasz dopasowanie tylko w jednym polu w poddokumencie. Byłoby to zgodne, nawet jeśli poddokument zawiera inne pola lub całe poddokumenty.
Ta różnica rozciąga się na indeks. _ensureIndex({c: 1})
i _ensureIndex({'c.d': 1})
to dwa różne indeksy i chociaż pierwszy indeksuje cały dokument podrzędny, nie będzie on używany, jeśli zapytanie dotyczy pojedynczego pola z c.d
notacja.