Penso di averlo capito dopo aver controllato i documenti di Mongo. Fondamentalmente, c'è una differenza di semantica tra i due. In sostanza, nella prima forma della query {c: {d: d1}}
, mongo presuppone che tu stia specificando l'intero sottodocumento. Quindi, se hai un documento secondario {c: {d: d1, e: e1}}
, non corrisponderà.
OTOH, la seconda forma della query {'c.d': d1}
implica che stai specificando una corrispondenza solo su un campo all'interno del documento secondario. Ciò corrisponderebbe anche se il documento secondario ha altri campi o interi documenti secondari.
Questa differenza si estende all'indice. _ensureIndex({c: 1})
e _ensureIndex({'c.d': 1})
sono due indici diversi e, anche se il primo indicizza l'intero documento secondario, non verrà utilizzato se esegui query su un singolo campo con il c.d
notazione.