Problemet ligger i den partiella matchningen, eftersom du inte begränsar regexet för hela ordet, den partiella matchningen som finns i a:b:c det är a:b resulterar i att du får det dokumentet.
Använd följande regex med ^$ som är ankare för att representera början och slutet av ordet;
db.foo.find({path: /^a:[^:]+$/})
db.foo.find({path: /^a:[a-z]+$/})
Detta kommer att få regexet att gälla för hela strängen och ignorera de partiella matchningarna som förklarats ovan. För mer om regex-ankare, klicka här .
Så, sammanfattningsvis, det finns ingen bugg, bara ett missbruk av regex.