Ik denk dat ik erachter ben gekomen na het controleren van de Mongo-documenten. In principe is er is een verschil in semantiek tussen die twee. In wezen, in de eerste vorm van de zoekopdracht {c: {d: d1}} , mongo gaat ervan uit dat u de volledige . opgeeft subdocument. Dus als je een subdocument hebt {c: {d: d1, e: e1}} , het komt niet overeen.
OTOH, de tweede vorm van de zoekopdracht {'c.d': d1} houdt in dat u slechts een overeenkomst opgeeft voor één veld in het subdocument. Dit zou overeenkomen, zelfs als het subdocument andere velden of volledige sub-subdocumenten heeft.
Dit verschil strekt zich uit tot de index. _ensureIndex({c: 1}) en _ensureIndex({'c.d': 1}) zijn twee verschillende indexen, en hoewel de eerste het hele subdocument indexeert, zal het niet worden gebruikt als je op een individueel veld zoekt met de c.d notatie.