O problema é com a correspondência parcial, já que você não está restringindo a regex para a palavra inteira, a correspondência parcial que existe em
a:b:c
que é a:b
está resultando na obtenção desse documento. Use o seguinte regex com
^$
que são âncoras para representar o início e o fim da palavra; db.foo.find({path: /^a:[^:]+$/})
db.foo.find({path: /^a:[a-z]+$/})
Isso fará com que a regex se aplique a toda a string e ignore as correspondências parciais, conforme explicado acima. Para saber mais sobre âncoras regex, clique aqui .
Então, em resumo, não há bug, apenas um uso indevido de regex.