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

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

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

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

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

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

0
Leopoldo 19 Сен 2018 в 19:54

2 ответа

Лучший ответ

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

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

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

Демо-версия :

1
styvane 20 Сен 2018 в 05:09

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

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

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" }
2
gil.fernandes 19 Сен 2018 в 17:16