这是我的方法:
def mongo_find(collection_name, find_value):
list(MongoClient("localhost:27017").db[collection_name].find(find_value))
find_value = {'milestones.content': {'$regex': 'The idea'}}, {'milestones.content'}
print(list(mongo_find(collection_name, find_value)))
我收到此错误:
TypeError: filter must be an instance of dict, bson.son.SON, or other type that inherits from collections.Mapping
但是以下工作没问题:
list(MongoClient("localhost:27017").db[collection_name].find({'milestones.content': {'$regex': 'The idea'}}, {'milestones.content'}))
因此,在运行mongo_find
方法时,我尝试打印:
print(find_value)
({'milestones.content': {'$regex': 'The idea'}}, {'milestones.content'})
可能是因为两端都添加了圆括号。有解决方案吗?
答案 0 :(得分:1)
在您的工作示例中
list(MongoClient("localhost:27017").db[collection_name].find({'milestones.content': {'$regex': 'The idea'}}, {'milestones.content'}))
您实际上是将两个参数传递给find函数。第一个是dictionary类型,并指定过滤器
{'milestones.content': {'$regex': 'The idea'}}
而第二个是python set,它将用于投影
{'milestones.content'}
您的非工作版本会通过{strong>一个参数传递给find()
方法,这是一个python tuple(这是输出中的圆括号来自)和看起来像那样:
({'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)))