Problemet er med den delvise matchning, da du ikke begrænser regex for hele ordet, den delvise match, der findes i a:b:c
det er a:b
resulterer i, at du får det dokument.
Brug følgende regex med ^$
der er ankre til at repræsentere begyndelsen og slutningen af ordet;
db.foo.find({path: /^a:[^:]+$/})
db.foo.find({path: /^a:[a-z]+$/})
Dette vil få regex til at gælde for hele strengen og ignorere de delvise matchninger som forklaret ovenfor. For mere om regex-ankre, klik her .
Så kort fortalt er der ingen fejl, kun misbrug af regulært udtryk.