MongoDB 正则表达式
示例
MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式。
> db.col.find() { "_id" : ObjectId("56c6bbef64799370c0ef358a"), "x" : "hello world", "tags" : [ "a", "b" ] } { "_id" : ObjectId("56c6bbfe64799370c0ef358b"), "x" : "hi world", "tags" : [ "b" ] } { "_id" : ObjectId("56c6bc9e64799370c0ef358c"), "x" : "nothing" }
> db.col.find({x:/world/}) { "_id" : ObjectId("56c6bbfe64799370c0ef358b"), "x" : "hi world", "tags" : [ "b" ] } { "_id" : ObjectId("56c6bbef64799370c0ef358a"), "x" : "hello world", "tags" : [ "a", "b" ] }
> db.col.find({x:{$regex:"world"}}) { "_id" : ObjectId("56c6bbfe64799370c0ef358b"), "x" : "hi world", "tags" : [ "b" ] } { "_id" : ObjectId("56c6bbef64799370c0ef358a"), "x" : "hello world", "tags" : [ "a", "b" ] }
上面后两种操作是等价的。
不区分大小写
> db.col.find({x:{$regex:"world", $options:"$i"}}) { "_id" : ObjectId("56c6bd9964799370c0ef358d"), "x" : "hihi WORLD" } { "_id" : ObjectId("56c6bbfe64799370c0ef358b"), "x" : "hi world", "tags" : [ "b" ] } { "_id" : ObjectId("56c6bbef64799370c0ef358a"), "x" : "hello world", "tags" : [ "a", "b" ] }
or
> db.col.find({x:/world/i}) { "_id" : ObjectId("56c6bd9964799370c0ef358d"), "x" : "hihi WORLD" } { "_id" : ObjectId("56c6bbfe64799370c0ef358b"), "x" : "hi world", "tags" : [ "b" ] } { "_id" : ObjectId("56c6bbef64799370c0ef358a"), "x" : "hello world", "tags" : [ "a", "b" ] }
数组使用正则表达式
> db.col.find({tags:/b/}) { "_id" : ObjectId("56c6bbef64799370c0ef358a"), "x" : "hello world", "tags" : [ "a", "b" ] } { "_id" : ObjectId("56c6bbfe64799370c0ef358b"), "x" : "hi world", "tags" : [ "b" ] } { "_id" : ObjectId("56c6bedf64799370c0ef358e"), "tags" : [ "abc", "m" ] }
可见数组中包含字符‘b’的都找出来了(包括“abc”)。
正则中包含变量
需要用eval将组合的字符串进行转换
> v="world" world > db.col.find({x:eval("/" + v + "/i")}) { "_id" : ObjectId("56c6bd9964799370c0ef358d"), "x" : "hihi WORLD" } { "_id" : ObjectId("56c6bbfe64799370c0ef358b"), "x" : "hi world", "tags" : [ "b" ] } { "_id" : ObjectId("56c6bbef64799370c0ef358a"), "x" : "hello world", "tags" : [ "a", "b" ] }