2015-05-19 1 views
8

मैं अपने डेटाबेस में सबसे प्रविष्टियों वाले लोगों की एक सूची प्राप्त करने का प्रयास कर रहा हूं।mongodb, pymongo, कुल अजीब आउटपुट (कर्सर के बारे में कुछ) देता है

print db.points.aggregate(
    [ 
     { 
     "$group": 
        { 
         "_id": "$created.user", 
         "count":{"$sum":1} 
        } 
     }, 
     { 
     "$sort": 
        {"count":-1} 
     } 
    ] 
) 

कोई प्रविष्टि इस तरह दिखता है:

{ 
    u'id': u'342902', 
    u'_id': ObjectId('555af76a029d3b1b0ff9a4be'), 
    u'type': u'node', 
    u'pos': [48.9979746, 8.3719741], 
    u'created': { 
        u'changeset': u'7105928', 
        u'version': u'4', 
        u'uid': u'163673', 
        u'timestamp': u'2011-01-27T18:05:54Z', 
        u'user': u'Free_Jan' 
       } 
} 

मुझे पता है कि created.user मौजूद है और नहीं तो पहुँचा जा सकता है।

फिर भी उत्पादन मैं मिलता है:

<pymongo.command_cursor.CommandCursor object at 0x02ADD6B0>

मैं एक क्रमबद्ध सूची प्राप्त नहीं करना चाहिए?

उत्तर

16

एक समेकन क्वेरी का परिणाम एक कर्सर है, नियमित find क्वेरी के लिए। pymongo के मामले में CommandCursor iterable है, इस प्रकार आप में से कोई कार्य करने में सक्षम हैं निम्नलिखित:

cursor = db.points.aggregate(...) 

# Option 1 
print(list(cursor)) 

# Option 2 
for document in cursor: 
    print(document) 

नोट: रूप arun noticed, दोनों ही मामलों, यानी आप एक सूची कर्सर से बाहर बनाने के बाद , या लूप के लिए पुनरावृत्त, आप कर्सर पर फिर से पुन: सक्रिय करने में सक्षम नहीं होंगे। उस स्थिति में पहला विकल्प बेहतर हो जाता है, यदि आप इसे भविष्य में उपयोग करना चाहते हैं, क्योंकि आप जितनी चाहें उतनी प्राप्त सूची का उपयोग कर सकते हैं, क्योंकि यह पहले से ही स्मृति में है।
दोहराने में सक्षम नहीं होने का कारण यह है कि कर्सर वास्तव में सर्वर पर है, और यह डेटा खंड-दर-खंड भेजता है, और इसके बाद आपको सभी डेटा (या सर्वर समाप्त हो जाता है) कर्सर नष्ट हो जाता है ।

+0

बस सावधानी के रूप में (हालांकि आप उन्हें दो विकल्पों के रूप में स्पष्ट रूप से उल्लेख करते हैं): सूची प्राप्त करने के बाद, आप फिर कर्सर पर फिर से सक्रिय नहीं हो सकते हैं। आपको सूची में पुन: प्रयास करना होगा। – arun

+0

नोटिस के लिए धन्यवाद, अद्यतन चेकआउट करें :) – bagrat

+3

सूची का उपयोग (कर्सर) आजकल काम नहीं कर रहा है। यह *** तर्क में त्रुटि देता है: '(कर्सर)' – user541905

संबंधित मुद्दे