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.