如何在pymongo中返回mongodb对象数组(没有光标)?MapReduce可以这样做吗?

如何在pymongo中返回mongodb对象数组(没有光标)?MapReduce可以这样做吗?,mongodb,pymongo,Mongodb,Pymongo,我在mongo中设置了一个db,我正在使用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

我在mongo中设置了一个db,我正在使用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中。

您可以在pymongo中调用mapReduce,并将find查询作为参数传递给它,它可以如下所示:

db.yourcollection.Map_reduce(map_function, reduce_function,query='{}')

关于投影,我认为您需要在reduce函数中执行它们,因为查询只指定选择条件,正如它在

中所说的那样。您不需要调用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对象


但注意,如果结果很大,则会导致所有东西都加载到内存中。

根据ASIA的答案: 如果您希望在每个条目中只包含一个值的列表,而不是对象列表,那么使用列表理解对我来说很有效

也就是说,如果每个对象代表一个用户,数据库存储了他们的
电子邮件
,并且您说需要所有15岁的用户

user\u emails=[user['email']代表db.people.find({'age':15})中的用户。


这是我不知道的一般python吗?游标对象上的list()强制游标进入其指向的值?这是一种语言-在JavaScript中(即在mongo shell中,您可以这样做:db.coll.find().toArray())-这将光标变成一个结果数组。如果只需要从数据库返回一个字段,是否可以像这样创建该字段的列表(例如在您的“a”示例中):>>>数据[1.0,2.0]?回答我自己的问题,我找到的最佳解决方案是: