2014-12-08 11 views
5

के साथ एकाधिक रिकॉर्ड अपडेट करें मैं अपने डेटाबेस में डेटा को Pymongo के माध्यम से डेटा संग्रहीत करने का प्रयास कर रहा हूं।PyMongo एकाधिक डेटा

client = MongoClient('ip', port) 
db = client.test_database 
hdd = db.hdd 

     products[{ 
     'Speed' : 'a', 
     'Capacity' : 'b', 
     'Format' : 'c' 
     } 
     { 
     'Speed' : 'd', 
     'Capacity' : 'e', 
     'Format': 'f'}] ... 

मेरे डेटाबेस 7 क्षेत्रों के साथ एक मेज hdd है और उनमें से 4 पहले से ही भर रहे हैं। Speed, capacity और format के मान "" हैं और products के डेटा के साथ प्रतिस्थापित करने की आवश्यकता है। मैं खाली फ़ील्ड को शब्दकोश के डेटा के साथ भरना चाहता हूं। क्या hdd को अपडेट करने का कोई तरीका है, और यदि यह संभव है, तो कैसे?

उत्तर

3

मुझे लगता है कि आपके पास मूल्यों के प्रत्येक सेट से जुड़े "_id" मान का कुछ प्रकार है, तो आप जानते हैं कि आपके संग्रह में कौन सा दस्तावेज़ अपडेट करना है? चलिए इसे "product_id" कहते हैं। आप की तरह अलग-अलग दस्तावेज़ों को अद्यतन कर सकते हैं:

for product, product_id in data: 
    hdd.update({'_id': product_id}, 
       {'$set': {'Speed': products['Speed'], 
         'capacity': products['capacity'], 
         'format': products['format']}}) 

अद्यतन करने के लिए पहला तर्क एक प्रश्न यह बताता है कि जो दस्तावेज मिलान करने के लिए है, दूसरा update operations का एक सेट है।

आप MongoDB 2.6 या बाद और नवीनतम PyMongo पर हैं, तो एक बहु-अपडेट का उपयोग करें:

bulk = hdd.initialize_ordered_bulk_op() 
for product, product_id in data: 
    bulk.find({'_id': product_id}).update({'$set': {'Speed': products['Speed'], 
                'capacity': products['capacity'], 
                'format': products['format']}}) 
bulk.execute() 

संचालन क्लाइंट पर बफ़र कर रहे हैं, तो वे सभी सर्वर के लिए भेजा गया है और पर क्रियान्वित एक बार जब आप "execute()" को कॉल करते हैं। Bulk update operations पाइमोंगो और मोंगोडीबी 2.6+ के साथ पारंपरिक अपडेट की तुलना में सर्वर के लिए कम दौर यात्रा की आवश्यकता होती है।

+0

क्या आप बस उन पर पुन: प्रयास करने के बजाय update_many विधि में एक संपूर्ण संग्रह नहीं कर सकते हैं? मान लीजिए कि आप सभी रिकॉर्ड अपडेट करना चाहते हैं? cursor = db.collection.update_many({}, myposts, upsert=True)> – Noah

+0

यह सिर्फ मेरे लिए काम नहीं करता है। myposts दस्तावेजों की एक सरणी है। – Noah

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