2013-02-26 128 views
8

मेरे पास मोंगो में एक डीबी सेट है जिसे मैं पिमोंगो के साथ एक्सेस कर रहा हूं।मैं पिमोंगो (कर्सर के बिना) में मोंगोडब ऑब्जेक्ट्स की सरणी कैसे वापस कर सकता हूं? MapReduce यह कर सकते हैं?

मैं शब्दकोशों की एक सूची में फ़ील्ड का एक छोटा सा समूह खींचने में सक्षम होना चाहता हूं। तो, मैं क्या मोंगो खोल जब मैं टाइप में मिलता है की तरह कुछ ...

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

मैं की तरह एक अजगर बयान करना चाहते हैं:

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") 

कुछ मैं उत्पादन करने के लिए कुछ विश्लेषण के लिए अनुसंधान करने के लिए इस डेटासेट का इरादा है, लेकिन मैं अजगर में आईओ ध्यान केंद्रित करना चाहते हैं।

उत्तर

21

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

जहां कोल आपकी db.collection ऑब्जेक्ट है।

लेकिन बड़े/बड़े परिणाम के साथ सावधानी बरतने के कारण हर चीज स्मृति में लोड हो जाती है।

+0

क्या यह एक सामान्य पायथन चीज है जिसे मैं नहीं जानता था? एक कर्सर ऑब्जेक्ट पर सूची() कर्सर को उसके मूल्यों के मूल्यों में मजबूर करता है? – Mittenchops

+0

यह एक भाषा की बात है - जावास्क्रिप्ट में (जो मोंगो शैल पर है, आप इसे इस तरह करेंगे: db.coll.find()। ToArray() - जो कर्सर को परिणामों की सरणी में बदल देता है। –

+0

यदि कोई चाहें तो डीबी से केवल एक फ़ील्ड लौटाया गया है, क्या इस तरह के क्षेत्र की सूची बनाना संभव है (उदाहरण के लिए 'ए' के ​​लिए आपके उदाहरण में): >>> डेटा [1.0, 2.0] ? – jaivalis

2

आप क्या कर सकते हैं, pymongo में MapReduce फोन और यह एक तर्क के रूप खोज क्वेरी पारित करने के लिए है यह इस तरह हो सकता है:

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

अनुमानों मुझे लगता है कि आप में उन्हें करने के लिए की आवश्यकता होगी के बारे में के रूप में यह mongo documentation