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

在我的 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 回答
0

您没有转义正确的字符,我相信您必须转义特殊字符,以便:

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

应该:

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

这些工作是因为逃避:

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

在第一个中,您逃脱了特殊字符,在第二个中,您有一组[]escaped ]

至于:

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

当不使用时,//我相信它会尝试只匹配一个字符,但是你最后也在使用[],我相信这表示正则表达式匹配.*所以它可以工作。

于 2012-11-06T08:21:10.860 回答