Il problema è con la corrispondenza parziale, dal momento che non stai limitando la regex per l'intera parola, la corrispondenza parziale che esiste in a:b:c
ovvero a:b
ti fa ottenere quel documento.
Usa la seguente espressione regolare con ^$
che sono ancore per rappresentare l'inizio e la fine della parola;
db.foo.find({path: /^a:[^:]+$/})
db.foo.find({path: /^a:[a-z]+$/})
Ciò farà applicare la regex per l'intera stringa e ignorerà le corrispondenze parziali come spiegato sopra. Per ulteriori informazioni sugli anchor regex, fai clic qui .
Quindi, in sintesi, non ci sono bug, solo un uso improprio di regex.