Masalahnya adalah dengan pencocokan sebagian, karena Anda tidak membatasi ekspresi reguler untuk seluruh kata, kecocokan sebagian yang ada di a:b:c
yaitu a:b
mengakibatkan Anda mendapatkan dokumen itu.
Gunakan regex berikut dengan ^$
yang merupakan jangkar untuk mewakili awal dan akhir kata;
db.foo.find({path: /^a:[^:]+$/})
db.foo.find({path: /^a:[a-z]+$/})
Ini akan membuat regex berlaku untuk seluruh string, dan mengabaikan kecocokan sebagian seperti yang dijelaskan di atas. Untuk informasi selengkapnya tentang jangkar regex, klik di sini .
Jadi, secara ringkas, tidak ada bug, hanya penyalahgunaan regex.