python mongodb找不到方法

时间:2018-05-15 14:40:20

标签: python-3.x mongodb arguments

这是我的方法:

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'})

可能是因为两端都添加了圆括号。有解决方案吗?

1 个答案:

答案 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)))