El problema es con la coincidencia parcial, ya que no está restringiendo la expresión regular para la palabra completa, la coincidencia parcial que existe en a:b:c
eso es a:b
está dando como resultado que usted obtenga ese documento.
Use la siguiente expresión regular con ^$
que son anclas para representar el principio y el final de la palabra;
db.foo.find({path: /^a:[^:]+$/})
db.foo.find({path: /^a:[a-z]+$/})
Esto hará que la expresión regular se aplique a toda la cadena e ignorará las coincidencias parciales como se explicó anteriormente. Para obtener más información sobre los anclajes de expresiones regulares, haga clic aquí .
Entonces, en resumen, no hay ningún error, solo un mal uso de regex.