В вашем рабочем примере
list(MongoClient("localhost:27017").db[collection_name].find({'milestones.content': {'$regex': 'The idea'}}, {'milestones.content'}))
вы фактически передаете два параметра в функцию поиска. Первый тип dictionary и определяет фильтр
{'milestones.content': {'$regex': 'The idea'}}
в то время как второй является питоном set , который будет использоваться для проекции
{'milestones.content'}
Ваша нерабочая версия передает, но один параметр в метод find()
, который является питоном кортеж (отсюда и взяты круглые скобки в вашем выводе), и выглядит вот так:
({'milestones.content': {'$regex': 'The idea'}}, {'milestones.content'})
Итак, чтобы исправить это, вы захотите передать два параметра, как в вашем рабочем примере:
def mongo_find(collection_name, filter. projection):
list(MongoClient("localhost:27017").db[collection_name].find(filter, projection))
filter = {'milestones.content': {'$regex': 'The idea'}}
projection = {'milestones.content'}
print(list(mongo_find(collection_name, filter, projection)))