Vấn đề là với đối sánh từng phần, vì bạn không giới hạn regex cho toàn bộ từ, đối sánh từng phần tồn tại trong a:b:c
đó là a:b
dẫn đến việc bạn nhận được tài liệu đó.
Sử dụng regex sau với ^$
đó là các ký tự neo để thể hiện phần đầu và phần cuối của từ;
db.foo.find({path: /^a:[^:]+$/})
db.foo.find({path: /^a:[a-z]+$/})
Điều này sẽ làm cho regex áp dụng cho toàn bộ chuỗi và bỏ qua các kết quả phù hợp từng phần như đã giải thích ở trên. Để biết thêm về neo regex, hãy nhấp vào đây .
Vì vậy, tóm lại, không có lỗi, chỉ là việc lạm dụng regex.