Het probleem zit hem in de gedeeltelijke overeenkomst, aangezien u de regex voor het hele woord niet beperkt, de gedeeltelijke overeenkomst die bestaat in a:b:c
dat is a:b
resulteert in dat u dat document krijgt.
Gebruik de volgende regex met ^$
die ankers zijn om het begin en het einde van het woord weer te geven;
db.foo.find({path: /^a:[^:]+$/})
db.foo.find({path: /^a:[a-z]+$/})
Dit zorgt ervoor dat de regex van toepassing is op de hele string en de gedeeltelijke overeenkomsten negeert zoals hierboven uitgelegd. Voor meer informatie over regex-ankers, klik hier .
Dus, samenvattend, er is geen bug, alleen een misbruik van regex.