2

[とを含むエントリが多数あるコレクションに対して、次のクエリを実行します]

 db.test.find({word:/[\[]/});           // could not be run in console
 db.test.find({word:/\[/ });            // could not be run in console
 db.test.find({word:/\]/});             //returns result
 db.test.find({word:/[\]]/});           //returns result
 db.test.find({word:{$regex:"\["}});    //no result
 db.test.find({word:{$regex:"\[[]"}});  //returns result

なぜ使用する\[のはそんなに奇妙ですか?バグですか。

おそらくmongodb 2.2.0を使用しています

4

2 に答える 2

0

適切な文字をエスケープしない場合は、次のように特殊文字をエスケープする必要があると思います。

db.test.find({word : /[/ });

する必要があります:

db.test.find({word : /\[/ });

これらはエスケープのために機能します:

db.test.find({word:/\]/});
db.test.find({word:/[\]]/}); 

最初のものでは特別な文字をエスケープし、2番目のものではエスケープされたグループ[]があり]ます。

はどうかと言うと:

db.moin.find({moin:{$regex:"\[[]"}});

使用しない場合は、//1つの文字のみを一致させようとしますが[]、最後に使用している場合、これは正規表現が一致.*することを意味し、機能すると思います。

于 2012-11-06T08:21:10.860 に答える
0

私のMongoDbバージョン2.0.3で正しく動作します:

> db.newColl.find({ word:/[\[]/})
{ "_id" : ObjectId("5098b7c2c1388461b656736c"), "word" : "abd[def" }
{ "_id" : ObjectId("5098b7c8c1388461b656736d"), "word" : "[def" }
> db.newColl.find({ word:/\[/})
{ "_id" : ObjectId("5098b7c2c1388461b656736c"), "word" : "abd[def" }
{ "_id" : ObjectId("5098b7c8c1388461b656736d"), "word" : "[def" }
于 2012-11-06T07:02:11.900 に答える