Запросить документ на основе значения поля, содержащего обратную косую черту, используя регулярное выражение - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь запросить БД с помощью документов, аналогичных представленным ниже.

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

Как отфильтровать все документы, начиная с: ge\\pt02\\kr02

Я пробовал много разных подходов, например:

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

, но я не могу понять, какподготовить правильный фильтр:

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Проблема в том, что вам нужно избежать косой черты.

Вот рабочий пример:

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" }
0 голосов
/ 19 сентября 2018

Нам нужно избежать обратной косой черты там.Кроме того, поскольку вы хотите выбрать только документы, начинающиеся с этого шаблона, вам необходимо сгруппировать регулярное выражение в круглые скобки и добавить к группе префикс с кареткой.Это дает нам следующее регулярное выражение:

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

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

Демо:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...