Как пройти & ldquo; javascript & rdquo; регулярные выражения с пимонго? [Дубликат]

Исправить исключение NullReferenceException можно с помощью Null-условных операторов в c # 6 и написать меньше кода для обработки нулевых проверок.

Он используется для проверки нуля до выполнения доступа к члену (?. ) или index (? [).

Пример

  var name = p?.Spouse?.FirstName;

эквивалентен:

    if (p != null)
    {
        if (p.Spouse != null)
        {
            name = p.Spouse.FirstName;
        }
    }

В результате имя будет нулевым когда p равно null или когда p.Spouse имеет значение null.

В противном случае имени переменной будет присвоено значение p.Spouse.FirstName.

Для получения дополнительной информации: Операторы с нулевым условием

105
задан RC1140 14 August 2010 в 13:42
поделиться

5 ответов

Оказывается, поиск регулярных выражений выполняется несколько иначе в pymongo, но так же просто.

Regex выполняется следующим образом:

db.collectionname.find({'files':{'$regex':'^File'}})

Это будет соответствовать всем документам, у которых есть свойство файлов, в котором есть элемент внутри, который начинается с файла

125
ответ дан RC1140 25 August 2018 в 09:09
поделиться
  • 1
    На самом деле, вы здесь, также образом, это делается в javascript (и, возможно, и на других языках), если вы используете $regex. @ Ответ Эрика - это способ python, который немного отличается. – drevicko 14 August 2013 в 00:33
  • 2
    какая разница? Они оба используют pythono pymongo правильно? Это часть запросов mongodb, поэтому я не вижу проблемы на самом деле. – Dexter 22 December 2014 в 19:40
  • 3
    Игнорирование возможно в регулярном выражении mongodb JScript, а именно. db.collectionname.find ({ 'файлы': { '$ регулярных выражений': '^ Файл', '$ опции': 'я'}}) – Ajay Gupta 25 April 2015 в 10:37
  • 4
    Этот ответ выглядит лучше для моих глаз. Зачем пытаться компилировать Python RE, если вы просто собираетесь его укрепить, чтобы Mongo мог скомпилировать его снова? Оператор $regex Mongo принимает аргумент $options. – Mark E. Haase 16 May 2015 в 15:56
  • 5
    Используйте r'^File' вместо '^File', чтобы избежать других проблем – Aminah Nuraini 2 December 2015 в 14:33
import re

def get_pattern_query(pattern,starting_with=False,ending_with=False,ignore_case=False):
    start = '^' if starting_with else '.*'
    end = '$' if ending_with else '.*'
    pattern = start + re.escape(pattern) + end
    return re.compile(pattern, re.IGNORECASE) if ignore_case else re.compile(pattern)

Выключение шаблона перед компиляцией обрабатывает все символы.

0
ответ дан daemon24 25 August 2018 в 09:09
поделиться

Решение re вообще не использует индекс. Вы должны использовать команды, такие как:

db.collectionname.find({'files':{'$regex':'^File'}})

(я не могу комментировать ниже их ответов, поэтому я отвечаю здесь)

0
ответ дан Jeff 25 August 2018 в 09:09
поделиться

Чтобы избежать двойной компиляции, вы можете использовать оболочку regex bson, которая поставляется вместе с PyMongo:

>>> regx = bson.regex.Regex('^foo')
>>> db.users.find_one({"files": regx})

Regex просто сохраняет строку, не пытаясь ее скомпилировать, поэтому find_one может затем определить аргумент как 'Regex' и сформировать соответствующий запрос Mongo.

Я чувствую, что этот способ немного более Pythonic, чем другой верный ответ, например:

>>> db.collectionname.find({'files':{'$regex':'^File'}})

. Стоит прочитать на bson Regex, если вы планируете использовать регулярные запросы, потому что есть некоторые оговорки.

1
ответ дан Keeely 25 August 2018 в 09:09
поделиться
  • 1
    Если вам нужно сопоставить массив с помощью $ if, тогда $ regex не будет работать для вас. bson.regex.Regex сделает трюк! – odedfos 4 July 2018 в 13:27

Если вы хотите включить параметры регулярного выражения (например, игнорировать), попробуйте следующее:

import re
regx = re.compile("^foo", re.IGNORECASE)
db.users.find_one({"files": regx})
150
ответ дан Mirzhan Irkegulov 25 August 2018 в 09:09
поделиться
  • 1
    Обратите внимание также, что regex, привязанные к началу (т.е.: начиная с ^), могут использовать индексы в db и в этом случае будут работать намного быстрее. – drevicko 14 August 2013 в 00:31
  • 2
    При запуске Regex с помощью ^ можно использовать только индекс в определенных случаях . При использовании re.IGNORECASE я считаю, что mongo не может использовать индекс для выполнения запроса. – nonagon 8 April 2015 в 18:08
  • 3
    Является ли это использование документированным где-то? Я не могу найти это в официальном документе pymongo API. – Hieu 16 October 2017 в 22:38
  • 4
    Работает для меня в пимонго! Благодаря!!! – blueDroid 22 April 2018 в 04:00
Другие вопросы по тегам:

Похожие вопросы: