2013-03-11 9 views
5

मैं mongoimport का उपयोग कर एक CSV फ़ाइल से MongoDB के ObjectId आयात करने के लिए संघर्ष कर रहा हूँ:mongoimport का उपयोग कर सीएसवी फ़ाइल से Mongodb ObjectId आयात करने के लिए कैसे?

मैं हर संयोजन की कोशिश की और विधि मैं के बारे में सोच सकता है से बचने लेकिन सही ढंग से ObjectId आयात नहीं कर सकते सीएसवी से।

सबसे पहले मैंने मोंगो डीबी से सीएसवी में निर्यात किए जाने वाले बिल्कुल आयात करने की कोशिश की। मैं मोंगोडीबी 2.2.1 का उपयोग कर रहा हूं।

मैं सिर्फ किसी अन्य दस्तावेज़ में दो संग्रह बनाया है और संदर्भित एक दस्तावेज़ के _ id:

use yourdb 
db.createCollection("student") 
db.createCollection("class") 
db.student.insert({"name":"Peter"}) 
db.student.find() returns { "_id" : ObjectId("5143af326d44e1ceb372121d"), "name" : "Peter" } 
db.class.insert({"student_id": ObjectId("5143af326d44e1ceb372121d"),"name":"II-4"}) 

तो मैं खोल में mongoexport आदेश का प्रयोग किया:

mongoexport -h localhost:3002 -d yourdb -c classes --csv -f student_id,name > export.txt 

सीएसवी परिणामस्वरूप इस तरह दिखता है:

student_id,name 
ObjectID(5143af326d44e1ceb372121d),"II-4" 

फिर मैंने परिणामी सीएसवी का उपयोग करके आयात किया:

mongoimport -h localhost:3002 -d yourdb -c class --type csv --file export.txt --headerline 

quering वर्ग संग्रह अब रिटर्न:

db.class.find() 
{ "_id" : ObjectId("5143afc66d44e1ceb372121e"), "student_id" : ObjectId("5143af326d44e1ceb372121d"), "name" : "II-4" } 
{ "_id" : ObjectId("5143b44788df173ba096550e"), "student_id" : "ObjectID(5143af326d44e1ceb372121d)", "name" : "II-4" } 

आप दूसरे दस्तावेज़ में student_id क्षेत्र नोटिस कर सकते हैं वास्तव में एक स्ट्रिंग और नहीं MongoDB ObjectId है।

मैं कुछ गलत हूं या मोंगो अपने स्वयं के निर्यातित सीएसवी आयात नहीं कर सकता है ??

+0

आप क्या होने की उम्मीद कर रहे हैं और इसके बजाय क्या हो रहा है? आप अपने उदाहरण में उसी संग्रह में वापस आयात कर रहे हैं जो इसे अस्पष्ट बनाता है। – JohnnyHK

+0

मैं सीएसवी से मोंगोडीबी के ऑब्जेक्ट आईडी आयात करने की कोशिश कर रहा हूं और मुझे केवल मोंगो डीबी में आयात किया जा रहा है। मैंने मोंगोडीबी के सीएसवी निर्यात को आयात करने का प्रयास किया है, लेकिन इसके परिणामस्वरूप ऑब्जेक्ट आईडी नहीं हुईं। ऐसा लगता है कि किसी ने mongoimport का उपयोग कर CSV फ़ाइल से ऑब्जेक्ट आईडी को आयात करने का प्रयास नहीं किया है? – vladimirp

+0

जब मैंने कोशिश की तो यह ठीक काम करता था। क्या आपकी वास्तविक test.csv फ़ाइल में हेडर लाइन है जिसमें फील्ड नाम हैं? आपका उदाहरण सीएसवी इसे नहीं दिखाता है। – JohnnyHK

उत्तर

3

समस्या को मोंगोडीबी 2.4.1 में पुन: उत्पन्न किया जा सकता है।

प्रलेखन (http://docs.mongodb.org/manual/reference/mongoimport/) राज्यों (मेरे द्वारा जोर):

नोट पूर्ण उदाहरण के लिए mongoimport और mongoexport का उपयोग न करें, उत्पादन बैकअप क्योंकि वे मज़बूती से कब्जा नहीं होगा डेटा प्रकार जानकारी। इस प्रकार की कार्यक्षमता के लिए "बैंगअप रणनीतियां मोंगोडीबी सिस्टम" में वर्णित अनुसार मोंगोडम्प और मोंगोरस्टोर का उपयोग करें।

इस चर्चा https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/RcnumM5QyxM एक समान प्रश्न इस के रूप में उत्तर दिया गया है:

tsv या csv साथ Mongoimport कर सकते हैं केवल आयात तार और संख्या, और [1 में विनिर्दिष्ट अन्य प्रकार के किसी भी नहीं ]। यदि आप उन प्रकारों को आयात करना चाहते हैं, और यदि आप अपने आयात फ़ाइल के लिए टीएसवी के बजाय JSON उत्पन्न कर सकते हैं, तो यह जाने का एक अच्छा तरीका होगा; अन्यथा, आप एक पोस्ट-प्रोसेसिंग चरण लिख सकते हैं जो तारों को उचित मोंगोडीबी प्रकारों में परिवर्तित करता है ( दिए गए फ़ील्ड के लिए मूल्य के प्रकार के बारे में कुछ ज्ञान के आधार पर)।

  • दान

[1] http://www.mongodb.org/display/DOCS/Mongo+Extended+JSON

+1

तो अंत में यह संभव नहीं है कि मैंने सोचा कि यह था। स्पष्टीकरण रोनास्टा के लिए धन्यवाद। – vladimirp

+0

प्रकारों को संरक्षित करने के लिए अपनी सीएसवी फ़ाइल को संगत JSON में परिवर्तित करने के निर्देशों पर निर्देश: http://stackoverflow.com/a/21298840/943833 – Roganartu

16

इस मुद्दे जो JSON से ObjectIds सम्मिलित करने के लिए कोशिश कर रहा है के साथ किसी के लिए - यह बहुत संभव मौजूदा आंकड़ों के संशोधन का एक सा के साथ है ।

बदलें:

{ "_id" : ObjectId("5143afc66d44e1ceb372121e"), 
    "student_id" : ObjectId("5143af326d44e1ceb372121d"), 
    "name" : "II-4" } 

के साथ:

{ "_id" : {"$oid":"5143afc66d44e1ceb372121e"}, 
    "student_id" : {"$oid":"5143af326d44e1ceb372121d"}, 
    "name" : "II-4" } 

बस ObjectId चादर को बदलने के लिए रेगुलर एक्सप्रेशन का उपयोग।

+2

सर्वश्रेष्ठ उत्तर! हरा होना चाहिए! – bora89

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