問題は部分一致にあります。単語全体の正規表現を制限していないため、a:b:c
に存在する部分一致です。 つまり、a:b
その結果、そのドキュメントを取得できます。
^$
で次の正規表現を使用します 単語の始まりと終わりを表すアンカーです。
db.foo.find({path: /^a:[^:]+$/})
db.foo.find({path: /^a:[a-z]+$/})
これにより、正規表現が文字列全体に適用され、上記で説明したように部分一致が無視されます。正規表現アンカーの詳細については、ここをクリック してください。 。
したがって、要約すると、バグはなく、正規表現の誤用だけです。