使用正则表达式基于包含反斜杠的字段值查询文档

时间:2018-09-19 16:54:37

标签: regex mongodb mongodb-query

我正在尝试使用与以下内容类似的文档查询数据库。

{
  "_id":"5b9bd1b947c7471038399a39",
  "subdir":"ge\\pt02\\kr02_20180824\\kr02_2018091log\\0010796ab5",
}

如何从ge\\pt02\\kr02

开始过滤所有文档

我尝试了许多不同的方法, 例如:

{"subdir": {"$regex": "pt02\\kr02*"}}

但是我不知道如何准备正确的过滤器:

2 个答案:

答案 0 :(得分:2)

问题在于您需要转义斜线。

这是一个有效的示例:

db.test1.insert({"subdir":"ge\\pt02\\kr02_20180824\\k2_2018091log\\0010796ab5"})

db.test1.find({"subdir": { $regex: "^ge\\\\pt02\\\\kr02"}})

打印输出:

{ "_id" : ObjectId("5ba28194fbb45cb9f7c58b18"), "subdir" : "ge\\pt02\\kr02_20180824\\kr02_2018091log\\0010796ab5" }

答案 1 :(得分:1)

我们需要在此处转义反斜杠。同样,由于只想选择以该模式开头的文档,因此需要将正则表达式分组为括号,并在该分组的前面加上插入符号。这为我们提供了以下正则表达式:

let pattern = "^(ge\\\\pt02\\\\kr02)";

{"subdir": {"$regex": pattern}}

Demo: