2013-02-26 25 views
8

Tôi có một thiết lập db trong mongo mà tôi đang truy cập với pymongo.Làm thế nào tôi có thể trả về một mảng các đối tượng mongodb trong pymongo (không có con trỏ)? MapReduce có thể làm điều này không?

Tôi muốn có thể kéo một nhóm nhỏ các trường vào danh sách từ điển. Vì vậy, một cái gì đó giống như những gì tôi nhận được trong vỏ Mongo khi tôi gõ ...

db.find({},{"variable1_of_interest":1, "variable2_of_interest":1}).limit(2).pretty() 

Tôi muốn một tuyên bố python như:

x = db.find({},{"variable1_of_interest":1, "variable2_of_interest":1}) 

trong đó x là một cấu trúc mảng của một số loại khá so với con trỏ --- tức là, thay vì lặp lại, chẳng hạn như:

data = [] 
x = db.find({},{"variable1_of_interest":1, "variable2_of_interest":1}) 
for i in x: 
    data.append(x) 

Tôi có thể sử dụng MapReduce để đưa điều này vào một lớp lót không? Một cái gì đó như

db.find({},{"variable1_of_interest":1, "variable2_of_interest":1}).map_reduce(mapper, reducer, "data") 

Tôi dự định xuất bộ dữ liệu này sang R để phân tích, nhưng tôi muốn tập trung IO vào Python.

Trả lời

21

bạn không cần phải gọi MapReduce, bạn chỉ cần bật con trỏ vào một danh sách như vậy:

>>> 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}] 

trong đó col là đối tượng db.collection của bạn.

Nhưng hãy thận trọng với kết quả lớn/lớn khiến mọi thứ được tải vào bộ nhớ.

+0

Đây có phải là một điều python chung mà tôi không biết? danh sách() trên một đối tượng con trỏ buộc con trỏ vào các giá trị trỏ đến? – Mittenchops

+0

nó là một ngôn ngữ điều - trong JavaScript (đó là tại mongo shell bạn sẽ làm điều đó như thế này: db.coll.find(). ToArray() - mà biến một con trỏ vào một mảng kết quả –

+0

Trong trường hợp người ta muốn chỉ có một trường được trả lại từ db, có thể tạo một danh sách chỉ trường đó như vậy (ví dụ trong ví dụ của bạn cho 'a'): >>> dữ liệu [1.0, 2.0] ? – jaivalis

2

Những gì bạn có thể làm là để gọi MapReduce trong pymongo và vượt qua nó truy vấn tìm như một cuộc tranh cãi, nó có thể là như thế này:

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

Về các dự Tôi nghĩ rằng bạn sẽ cần phải thực hiện chúng trong các chức năng giảm từ truy vấn chỉ định cụ thể các tiêu chí lựa chọn vì nó nói trong mongo documentation

Các vấn đề liên quan