Пытаюсь создать запрос MongoDB с драйвером Pymongo, который ищет в базе данных некоторые породы собак, но мне нужно выполнить сопоставление с образцом из-за разного качества данных. Я знаю, что не могу использовать Regex в запросе в стиле $in, поэтому я использую шаблоны JS.
У меня пока так:
df = shelter.getRecords({
"breed": {"$in": [/labrador/i, /chesa/i, /newfound/i]}
})
Но я получаю синтаксические ошибки. Кажется, команда работает в оболочке Mongo .... это ограничение Pymongo?
Я попробовал и придумал гибридный подход.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать "$regex" вот так.
N.B.: Ваш pymongo фильтр запроса может быть python словарем, например {'breed': {'$regex': '(labrador)|(chesa)|(newfound)', '$options': 'i'}}.
db.shelter.find({
"breed": {
"$regex": "(labrador)|(chesa)|(newfound)",
"$options": "i"
}
})
Пример вывода:
[
{
"_id": 21,
"breed": "Chesapeake Retriever"
},
{
"_id": 80,
"breed": "Newfoundland"
}
]
Попробуйте на mongoplayground.net.
Спасибо, я использовал очень похожий подход!
В конце концов, это был мой гибридный подход...
labRegex = re.compile(".*lab.*", re.IGNORECASE)
chesaRegex = re.compile(".*chesa.*", re.IGNORECASE)
newRegex = re.compile(".*newf.*", re.IGNORECASE)
df = pd.DataFrame.from_records(shelter.getRecordCriteria({
'$or':[ #Regex isn't allowed in an $in helper so use $or
{"breed": {'$regex': newRegex}}, #pass the regex to the filter
{"breed": {'$regex': chesaRegex}},
{"breed": {'$regex': labRegex}},
],
"sex_upon_outcome": "Intact Female",
"age_upon_outcome_in_weeks\": {"$gte":26.0, "$lte":156.0}
}))
Вы пробовали использовать
pymongo's bson.regex.Regex?