我在mongo中设置了一个数据库,我正在使用pymongo访问。
我希望能够将一小组字段拖入字典列表中。所以,就像我输入mongo shell时的内容......
db.find({},{"variable1_of_interest":1, "variable2_of_interest":1}).limit(2).pretty()
我想要一个python语句,如:
x = db.find({},{"variable1_of_interest":1, "variable2_of_interest":1})
其中x是某种类型的数组结构而不是游标---也就是说,而不是迭代,如:
data = []
x = db.find({},{"variable1_of_interest":1, "variable2_of_interest":1})
for i in x:
data.append(x)
我是否有可能使用MapReduce将其带入单行内容?像
这样的东西db.find({},{"variable1_of_interest":1, "variable2_of_interest":1}).map_reduce(mapper, reducer, "data")
我打算将此数据集输出到R进行某些分析,但我想将IO集中在Python中。
答案 0 :(得分:24)
您不需要调用mapReduce,只需将光标转换为如下列表:
>>> data = list(col.find({},{"a":1,"b":1,"_id":0}).limit(2))
>>> data
[{u'a': 1.0, u'b': 2.0}, {u'a': 2.0, u'b': 3.0}]
其中col是你的db.collection对象。
但是对于大/大结果的警告导致每件东西都被加载到内存中。
答案 1 :(得分:2)
你可以做的是在pymongo中调用mapReduce并将查询作为参数传递给它,它可能是这样的:
db.yourcollection.Map_reduce(map_function, reduce_function,query='{}')
关于投影我认为您需要在reduce函数中执行它们,因为查询仅指定选择标准,如mongo documentation
中所述答案 2 :(得分:0)
以Asya的答案为基础: 如果您只想在每个条目中只列出一个值而不是对象列表,那么使用列表理解对我有用。
即如果每个对象代表一个用户,并且数据库存储了他们的email
,并且您说希望所有15岁的用户
user_emails = [user['email'] for user in db.people.find( {'age' : 15} )]