0


To use $regex, we can use one of the following 3 syntaxes:

{ : { $regex: /pattern/, $options: ” } }
{ : { $regex: ‘pattern’, $options: ” } }
{ : { $regex: /pattern/ } }

我们针对前两种语法进行了对比测试后得到了完全不同的效果

#测试用的集合
pradb>db.newtab.find()
{ “_id” : ObjectId(“5a2a2555c8ba4994e594397f”), “f1” : “realapp” }
{ “_id” : ObjectId(“5a2a255dc8ba4994e5943980”), “f1” : “racapp” }
{ “_id” : ObjectId(“5a2a2562c8ba4994e5943981”), “f1” : “mysql” }
{ “_id” : ObjectId(“5a2a2d60c8ba4994e5943982”), “f1” : “vcapp” }
{ “_id” : ObjectId(“5a2a340fc8ba4994e5943983”), “f1” : “rea\napp” }
{ “_id” : ObjectId(“5a2e4156c3b9a66ec4988f15”), “f1” : “suretrea” }

#使用单引号将字符串括起来,我们得到的查询结果是”realapp”
pradb>db.newtab.find({f1:{$regex:’rea \n# comment 1\nl’,$options:”x”}})
{ “_id” : ObjectId(“5a2a2555c8ba4994e594397f”), “f1” : “realapp” }

#使用/将字符串括起来,我们得到的查询结果是”rea\napp”
pradb>db.newtab.find({f1:{$regex:/rea \n# comment 1\nl/,$options:”x”}})
{ “_id” : ObjectId(“5a2a340fc8ba4994e5943983”), “f1” : “rea\napp” }

// and ”为何会导致不同的结果输出?