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.