Le problème est avec la correspondance partielle, puisque vous ne restreignez pas la regex pour le mot entier, la correspondance partielle qui existe dans a:b:c
c'est-à-dire a:b
vous permet d'obtenir ce document.
Utilisez l'expression régulière suivante avec ^$
qui sont des ancres pour représenter le début et la fin du mot ;
db.foo.find({path: /^a:[^:]+$/})
db.foo.find({path: /^a:[a-z]+$/})
Cela fera en sorte que la regex s'applique à toute la chaîne et ignore les correspondances partielles comme expliqué ci-dessus. Pour en savoir plus sur les ancres regex, cliquez ici .
Donc, en résumé, il n'y a pas de bogue, juste une mauvaise utilisation de regex.