Das Problem liegt bei der teilweisen Übereinstimmung, da Sie die Regex nicht auf das ganze Wort einschränken, die teilweise Übereinstimmung, die in a:b:c
existiert das ist a:b
führt dazu, dass Sie dieses Dokument erhalten.
Verwenden Sie die folgende Regex mit ^$
das sind Anker, die den Anfang und das Ende des Wortes darstellen;
db.foo.find({path: /^a:[^:]+$/})
db.foo.find({path: /^a:[a-z]+$/})
Dadurch wird die Regex für die gesamte Zeichenfolge angewendet und die teilweisen Übereinstimmungen wie oben erläutert ignoriert. Weitere Informationen zu Regex-Ankern finden Sie hier .
Zusammenfassend lässt sich sagen, es gibt keinen Fehler, nur einen Missbrauch von Regex.