MongoDB的模糊查询
  模糊查询时数据库应用中不可缺少的一步,MySQL中使用like和或者regexp来实现实现模糊查询,而MongoDB则使用$regex操作符或直接使用正则表达式对象来实现。
| MySQL | MongoDB | 
| select * from users where name like ’%gooohlan%’ | db.users.find({name: {$regex: /gooohlan/}}) | 
| select * from users where name regexp ’gooohlan’ | db.users.find({name: /gooohlan/}) | 
更多相关的语法可查看官方文档:$regex,就不再做多讨论。
使用MongoDB GO Driver进行查询
先来看看我们的数据源:
| 12
 3
 4
 5
 6
 7
 
 |  db.users.find({}){ "_id" : ObjectId("600704fffc9b483f284d0bc3"), "name" : "1gooohlan" }
 { "_id" : ObjectId("600704fffc9b483f284d0bc4"), "name" : "gooohlanPP" }
 { "_id" : ObjectId("600704fffc9b483f284d0bc5"), "name" : "gooohlan" }
 { "_id" : ObjectId("600704fffc9b483f284d0bc6"), "name" : "gooohlan123" }
 { "_id" : ObjectId("600704fffc9b483f284d0bc7"), "name" : "abcdef" }
 { "_id" : ObjectId("60070500fc9b483f284d0bc8"), "name" : "test" }
 
 | 
然后执行模糊查询:
| 12
 3
 4
 5
 
 | db.users.find({name:{$regex: /gooohlan/,$options: "i"}}){ "_id" : ObjectId("600704fffc9b483f284d0bc3"), "name" : "1gooohlan" }
 { "_id" : ObjectId("600704fffc9b483f284d0bc4"), "name" : "gooohlanPP" }
 { "_id" : ObjectId("600704fffc9b483f284d0bc5"), "name" : "gooohlan" }
 { "_id" : ObjectId("600704fffc9b483f284d0bc6"), "name" : "gooohlan123" }
 
 | 
错误尝试
上述方式是MongoDB的命令行的执行方式,如果我们直接在Go里面直接这样写是行不通的
| 12
 3
 4
 5
 6
 
 | filter := bson.M{"name": bson.M{
 "$regex":   "/gooohlan/",
 "$options": "i",
 },
 }
 
 | 
当你兴高采烈地拿着上面的查询条件去查询时,你会发现它会返回一个空数组给你
正确的使用方式
| 12
 3
 4
 5
 6
 
 | filter := bson.M{"name": primitive.Regex{
 Pattern:"/gooohlan/",
 Options: "i",
 },
 }
 
 | 
执行后发现还是没有,一番查找后才发现Pattern不再额外需要两个/,直接填写正则内容即可,所以我们改为:
| 12
 3
 4
 5
 6
 
 | filter := bson.M{"name": primitive.Regex{
 Pattern:"gooohlan",
 Options: "i",
 },
 }
 
 | 
执行结果为:
| 12
 3
 4
 
 | {ID:ObjectID("600704fffc9b483f284d0bc3") Name:1gooohlan}{ID:ObjectID("600704fffc9b483f284d0bc4") Name:gooohlanPP}
 {ID:ObjectID("600704fffc9b483f284d0bc5") Name:gooohlan}
 {ID:ObjectID("600704fffc9b483f284d0bc6") Name:gooohlan123}
 
 | 
与命令行查找的一致,说明没有问题