2012-01-10 11 views
6

के साथ डेटा अपडेट करें क्या किसी प्रकार की स्क्रिप्ट के साथ मोंगोडब में डेटा अपडेट करने की संभावना है? मैं मोंगो खोल तक नहीं पहुंच सकता (नहीं कर सकता) - लेकिन मोंगोशेल अपडेट क्वेरी करना चाहता हूं। मेरा डेटा एक सीएसवी फ़ाइल है। मैं डेटा (निष्कर्षण और परिवर्तन) के विश्लेषण के लिए हडूप का उपयोग करता हूं। मुझे डेटा को वापस mongodb में प्राप्त करने और कुछ विशेषताओं को अपडेट करने की आवश्यकता है। अद्यतन के संदर्भ के रूप में मैं जेनरेट आईडीमोंगोडीबी स्क्रिप्ट

का उपयोग करना चाहूंगा, क्या यह कार्य किया जा सकता है?

किसी भी मदद बहुत

उत्तर

10

आप एक CSV फ़ाइल से डेटा पढ़ने और MongoDB में आयात करना चाहते सराहना की होगी? आप एक स्क्रिप्ट फ़ाइल (जावास्क्रिप्ट) उत्पन्न कर सकते हैं और इसे "scripting the shell" में वर्णित करने के लिए मोंगो खोल का उपयोग कर सकते हैं।

उदाहरण सत्र, परीक्षण डेटाबेस, एक खाली foo संग्रह के साथ शुरू:

db.foo.insert({name : "wade", position : "guard"}); 
db.foo.update({name : "james"}, {$set : {position : "power forward"}}, false, true); 

और स्क्रिप्ट चलाने:

> db.foo.insert({name : "james", position : "forward"}) 
> db.foo.find() 
{ "_id" : ObjectId("4f0c99f6cb435f1e7d7fedea"), "name" : "james",  "position" : "forward" } 
> 

तो आप उत्पन्न अपनी स्क्रिप्ट का mongo_scripting.js मान लीजिए

mongo localhost:27017/test mongo_scripting.js 

वापस mongo पर जा रहा है:

> db.foo.find() 
{ "_id" : ObjectId("4f0c99f6cb435f1e7d7fedea"), "name" : "james", "position" : "power forward" } 
{ "_id" : ObjectId("4f0c9a64a4a4642bae6459ea"), "name" : "wade",  "position" : "guard" } 
> 

आप देखते हैं कि एक दस्तावेज़ अपडेट किया गया है और एक नया डाला गया है।

जावा/पायथन का उपयोग करना एक विकल्प है ... डेटा लोड करने के लिए ड्राइवर।

+0

हाय, यह सिर्फ एक आयात नहीं है। मैं मौजूदा डेटा को अपडेट करना चाहता हूं। मैंने "शेल स्क्रिप्टिंग" देखा। लेकिन इसकी बहुत मदद नहीं है - या क्या मुझे कुछ याद आ रही है? – Backlit

+0

मुझे नहीं लगता कि आप उलझन में क्यों हैं, मुझे जवाब अपडेट करने दें। – milan

+0

thx u milan - यह पूरी तरह से काम करता है – Backlit

2

यदि आप मोंगोडीबी से कनेक्ट कर सकते हैं, तो आप निश्चित रूप से खोल का उपयोग कर सकते हैं। बस अपने स्थानीय मशीन पर खोल चलाने के लिए और, दूरस्थ मोंगो उदाहरण से कनेक्ट करने की तरह यह बताना:

मोंगो dbserver.mydomain.com/foo

तुम भी हालांकि mongoimport चाहते हैं, mongoimport, http://www.mongodb.org/display/DOCS/Import+Export+Tools उपयोग करने पर विचार कर सकते हैं पूरे दस्तावेजों को बनाने या बदलने के लिए, जैसा कि आपने पूछा है दस्तावेजों के भीतर फ़ील्ड अपडेट नहीं करें।

ऐसा लगता है जैसे आपको CSV की प्रत्येक पंक्ति को संसाधित करने और मोंगोडीबी में दस्तावेज़ अपडेट करने के लिए एक स्क्रिप्ट लिखनी होगी। पायथन में, वह स्क्रिप्ट कुछ इस प्रकार जाएगी:

import csv, pymongo, sys 
foo_db = pymongo.Connection("dbserver.mydomain.com").foo 
csv_reader = csv.reader(open(sys.argv[1], 'rb'), delimiter=',', quotechar='"') 
for line in csv_reader: 
    _id, field1, field2 = line 
    foo_db.my_collection.update({ 
     "_id": _id 
    }, { 
     "$set": { "field1": field1, "field2": field2 } 
    }, safe=True)