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



我正在尝试使用类似于下面介绍的文档来查询数据库。

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

如何过滤所有以以下内容开头的文档:ge\pt02\kr02

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

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

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

问题是你需要转义斜杠。

这是一个工作示例:

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" }

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

let pattern = "^(ge\\pt02\\kr02)";
{"subdir": {"$regex": pattern}}

演示:

最新更新