【问题标题】:Syntax for regular expressions in MongoDBMongoDB 中正则表达式的语法
【发布时间】:2020-09-10 21:04:49
【问题描述】:
> db.inventory.find( )
{ "_id" : ObjectId("5eb67598bee5213484d45087"), "item" : "journal", "qty" : 25, "status" : "A", "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "tags" : [ "blank", "red" ] }
{ "_id" : ObjectId("5eb67598bee5213484d45088"), "item" : "notebook", "qty" : 50, "status" : "A", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank" ] }
{ "_id" : ObjectId("5eb67598bee5213484d45089"), "item" : "paper", "qty" : 10, "status" : "D", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank", "plain" ] }
{ "_id" : ObjectId("5eb67598bee5213484d4508a"), "item" : "planner", "qty" : 0, "status" : "D", "size" : { "h" : 22.85, "w" : 30, "uom" : "cm" }, "tags" : [ "blank", "red" ] }
{ "_id" : ObjectId("5eb67598bee5213484d4508b"), "item" : "postcard", "qty" : 45, "status" : "A", "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "tags" : [ "blue" ] }
{ "_id" : ObjectId("5ebfd02b3a3b38a52be04608"), "item" : "journal", "qty" : 25, "tags" : [ "blank", "red" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("5ebfd02b3a3b38a52be04609"), "item" : "notebook", "qty" : 50, "tags" : [ "red", "blank" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("5ebfd02b3a3b38a52be0460a"), "item" : "paper", "qty" : 100, "tags" : [ "red", "blank", "plain" ], "dim_cm" : [ 14, 21 ] }
{ "_id" : ObjectId("5ebfd02b3a3b38a52be0460b"), "item" : "planner", "qty" : 75, "tags" : [ "blank", "red" ], "dim_cm" : [ 22.85, 30 ] }
{ "_id" : ObjectId("5ebfd02b3a3b38a52be0460c"), "item" : "postcard", "qty" : 45, "tags" : [ "blue" ], "dim_cm" : [ 10, 15.25 ] }
> 

我打算找到item没有使用字母z的数据:

> db.inventory.find( { item: { $regex: /^z/, $options: 'm'} } )
> db.inventory.find( { item: { $regex: /^z/ } } )
>

这些没有提供任何结果。

此页面https://regexr.com/ 显示[^abc] 不能用于a、b 或c。
请指出错误。

【问题讨论】:

标签: regex database mongodb nosql


【解决方案1】:

MongoDB 使用Perl Compatible Regular Expressions

在字符类中,插入符号表示否定:/[^abc]/ 匹配包含除abc 之外的任何字符的字符串。这将匹配“test”、“tackle”和“cat”,但不匹配“cab”。

在模式的开头,插入符号匹配字符串的开头:/^z/ 仅在比较的字符串以 z 开头时匹配。

美元符号可用于匹配字符串的结尾:/z$/ 仅在字符串以 z 结尾时匹配。

星号可用于匹配字符或类的重复,/[^z]*/ 将匹配零个或多个不是z 的字符

如果您只想在字符串不包含z 时进行匹配,您可以使用否定字符类,其中重复锚定到字符串的开头和结尾:

db.inventory.find( { item: { $regex: /^[^z]*$/ } } )

或者您可以使用 z$not 运算符的未锚定匹配:

db.inventory.find( { item: { $not: /z/ } } )

详情请参阅pcre2pattern specification

【讨论】:

    【解决方案2】:

    使用$not运算符进行逻辑非运算

    db.inventory.find( { item: { $not: /^z/ } } )
    

    【讨论】:

      猜你喜欢
      • 2012-05-06
      • 2016-10-08
      • 1970-01-01
      • 2016-08-18
      • 2011-03-22
      • 2011-08-23
      • 2010-09-20
      • 2011-09-01
      相关资源
      最近更新 更多