Исправить исключение 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.
Для получения дополнительной информации: Операторы с нулевым условием
Оказывается, поиск регулярных выражений выполняется несколько иначе в pymongo, но так же просто.
Regex выполняется следующим образом:
db.collectionname.find({'files':{'$regex':'^File'}})
Это будет соответствовать всем документам, у которых есть свойство файлов, в котором есть элемент внутри, который начинается с файла
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)
Выключение шаблона перед компиляцией обрабатывает все символы.
Решение re
вообще не использует индекс. Вы должны использовать команды, такие как:
db.collectionname.find({'files':{'$regex':'^File'}})
(я не могу комментировать ниже их ответов, поэтому я отвечаю здесь)
Чтобы избежать двойной компиляции, вы можете использовать оболочку 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, если вы планируете использовать регулярные запросы, потому что есть некоторые оговорки.
bson.regex.Regex
сделает трюк!
– odedfos
4 July 2018 в 13:27
Если вы хотите включить параметры регулярного выражения (например, игнорировать), попробуйте следующее:
import re
regx = re.compile("^foo", re.IGNORECASE)
db.users.find_one({"files": regx})
^
), могут использовать индексы в db и в этом случае будут работать намного быстрее.
– drevicko
14 August 2013 в 00:31
$regex
. @ Ответ Эрика - это способ python, который немного отличается. – drevicko 14 August 2013 в 00:33$regex
Mongo принимает аргумент$options
. – Mark E. Haase 16 May 2015 в 15:56r'^File'
вместо'^File'
, чтобы избежать других проблем – Aminah Nuraini 2 December 2015 в 14:33