示例
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" ] }