মংগোডিবিতে কীভাবে সংগ্রহ সিএসভিতে রফতানি করবেন?


104

আপনি কোনও .csvফাইলে একটি মোঙ্গোডিবি সংগ্রহের সমস্ত রেকর্ড কীভাবে রফতানি করবেন ?

mongoexport --host localhost --db dbname --collection name --type=csv > test.csv

এটি আমাকে রফতানি করার জন্য প্রয়োজনীয় ক্ষেত্রগুলির নাম উল্লেখ করতে বলছে। আমি কি কেবল ক্ষেত্রের নাম উল্লেখ না করে সমস্ত ক্ষেত্র রফতানি করতে পারি?

উত্তর:


117

@ করোলি-হরভথের ঠিক আছে। সিএসভির জন্য ক্ষেত্রগুলি প্রয়োজনীয়।

মঙ্গোডিবি ইস্যু ট্র্যাকার এই বাগ অনুসারে https://jira.mongodb.org/browse/SERVER-4224 আপনি কোনও CSV রফতানি করার সময় ক্ষেত্রগুলি সরবরাহ করতে হবে । এটিতে ডক্সগুলি পরিষ্কার নয়। এটাই ত্রুটির কারণ।

এটা চেষ্টা কর:

mongoexport --host localhost --db dbname --collection name --csv --out text.csv --fields firstName,middleName,lastName

হালনাগাদ:

এই প্রতিশ্রুতিবদ্ধ: https://github.com/mongodb/mongo-tools/commit/586c00ef09c32c77907bd20d722049ed23065398 ডক্সগুলি 3.0.0-rc10 এবং তার পরে ঠিক করে। ইহা পরিবর্তনশীল

Fields string `long:"fields" short:"f" description:"comma separated list of field names, e.g. -f name,age"`

প্রতি

Fields string `long:"fields" short:"f" description:"comma separated list of field names (required for exporting CSV) e.g. -f \"name,age\" "`

সংস্করণ 3.0 এবং উপরে:

এটি হ্রাস করা হয়েছে এর --type=csvপরিবর্তে আপনার ব্যবহার করা উচিত --csv

আরও বিশদ: https://docs.mongodb.com/manual/references/program/mongoexport/#export-in-csv-format

সম্পূর্ণ আদেশ:

mongoexport --host localhost --db dbname --collection name --type=csv --out text.csv --fields firstName,middleName,lastName

16
সংস্করণ 3.0.6 হিসাবে mongoexportবলা হয়েছেcsv flag is deprecated; please use --type=csv instead
রোমান দিবিখিন

সংস্করণ 3.0 এবং উপরের সম্পাদনার জন্য ধন্যবাদ (বেনামে)
ক্যাম্পেটারসন

4
প্রতিটি নামকরণের পরিবর্তে সমস্ত ক্ষেত্রকে অন্তর্ভুক্ত করার একটি দ্রুত উপায় আছে?
কেভজ

53

এছাড়াও, আপনাকে কমা দ্বারা পৃথক করা ফিল্ডের নামগুলির মধ্যে ফাঁকা স্থানের অনুমতি দেওয়া নেই।

খারাপ: -f firstname, lastname

ভাল: -f firstname,lastname


27
mongoexport  --help
....
-f [ --fields ] arg     comma separated list of field names e.g. -f name,age
--fieldFile arg         file with fields names - 1 per line

আপনাকে এটি ম্যানুয়ালি নির্দিষ্ট করতে হবে এবং আপনি যদি এটি সম্পর্কে চিন্তা করেন তবে এটি সঠিকভাবে বোঝায়। মঙ্গোডিবি স্কিমহীন; অন্যদিকে, সিএসভিতে কলামগুলির জন্য একটি স্থির বিন্যাস রয়েছে। বিভিন্ন নথিতে কী ক্ষেত্রগুলি ব্যবহৃত হচ্ছে তা জেনেও CSV ডাম্প আউটপুট করা অসম্ভব।

আপনার যদি একটি স্থির স্কিমা থাকে তবে সম্ভবত আপনি একটি নথি পুনরুদ্ধার করতে পারেন, এটি থেকে ক্ষেত্রের নামগুলি একটি স্ক্রিপ্টের মাধ্যমে সংগ্রহ করুন এবং এটি মঙ্গোএক্সপোর্টে প্রেরণ করুন।


4
আমি সন্ধান করছিলাম যদি আমি কোনও রেকর্ড থেকে ক্ষেত্রের তালিকা পেতে পারি। উদাহরণস্বরূপ db.collection.finOne () থেকে getFields ()। তবে আমি অনুমান করি যে এটি সঠিক পদ্ধতি নয় (গেটফিল্ডস)। আমি getKeys () চেষ্টাও করেছি। অন্যথায় আমাকে কী: মান হ্যাশ সহ রেকর্ডটি পেতে হবে।
সফল স্টাথ

আমি একই জিনিসটি করার চেষ্টা করছি, তবে এটি সিএসভি ফাইলগুলি কেন সঠিকভাবে আমদানি করে না তা নির্ধারণ করার জন্য। আমার ক্ষেত্রে, আমার নিজের সম্পর্কে সমস্ত কিছু বলা দরকার, যার মধ্যে এটি নিজেই কোন ক্ষেত্রটি "আবিষ্কার" করেছিল including সুতরাং আমার ক্ষেত্রে ক্ষেত্রগুলি নির্দিষ্ট করে দেওয়ার সঠিক ধারণা নেই, কারণ সেগুলি কী তা আমি জানি না!
স্টিফেন

ফিল্ড কাটার স্ক্রিপ্টের সম্মুখভাগে, আমি এটি এক বছর বা তার আগে পোস্ট করেছি , আপনাকে কয়েকটি ধারণা দিতে পারে।
অ্যারবার 11

9

আপনি যদি চান তবে আপনি সমস্ত সংগ্রহগুলি নির্দিষ্ট করে ছাড়াই সিএসভিতে রফতানি করতে পারবেন --fields(সমস্ত ক্ষেত্র রফতানি করবে)।

Http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/ থেকে এই বাশ স্ক্রিপ্টটি চালান

OIFS=$IFS;
IFS=",";

# fill in your details here
dbname=DBNAME
user=USERNAME
pass=PASSWORD
host=HOSTNAME:PORT

# first get all collections in the database
collections=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();db.getCollectionNames();"`;
collections=`mongo $dbname --eval "rs.slaveOk();db.getCollectionNames();"`;
collectionArray=($collections);

# for each collection
for ((i=0; i<${#collectionArray[@]}; ++i));
do
    echo 'exporting collection' ${collectionArray[$i]}
    # get comma separated list of keys. do this by peeking into the first document in the collection and get his set of keys
    keys=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();var keys = []; for(var key in db.${collectionArray[$i]}.find().sort({_id: -1}).limit(1)[0]) { keys.push(key); }; keys;" --quiet`;
    # now use mongoexport with the set of keys to export the collection to csv
    mongoexport --host $host -u $user -p $pass -d $dbname -c ${collectionArray[$i]} --fields "$keys" --csv --out $dbname.${collectionArray[$i]}.csv;
done

IFS=$OIFS;

4
উপরের স্ক্রিপ্টটি কেবলমাত্র ইস্যুটি হ'ল এটি প্রতিটি সংগ্রহের প্রথম নথিতে ধরে নিয়েছে যে সমস্ত সম্ভাব্য কী রয়েছে যা সেই সংকলনের কোনও নথিতে উপস্থিত হতে পারে; ডকুমেন্ট টাইপটিতে একটি অ্যারে বা নেস্টেড সাব ডকুমেন্ট থাকতে পারে তা ক্ষেত্রে নাও হতে পারে।
অ্যারবার 11

@ অ্যারবার ১১ আপনি ঠিক বলেছেন, এই গুরুত্বপূর্ণ সত্যটি উল্লেখ করতে ভুলে গেছেন। আমি সাধারণত যা করি, তা নিয়মিতভাবে সমস্ত কীগুলি সংগ্রহ করতে এবং সমস্ত কীগুলি টানতে এটি ব্যবহার করতে স্ক্রিপ্ট হ্রাস করার স্ক্রিপ্টটি চালায়
মাইকেল

3

আমার জন্য এটি করতে আমি মঙ্গোএক্সপোর্ট পেতে পারি না। আমি খুঁজে পেয়েছি যে, সমস্ত ক্ষেত্রের একটি সম্পূর্ণ তালিকা পেতে, আপনাকে একবারে পুরো সংগ্রহটি লুপ করতে হবে। শিরোনাম উত্পন্ন করতে এটি ব্যবহার করুন। তারপরে প্রতিটি নথির জন্য এই শিরোনামগুলি পপুলেট করার জন্য সংগ্রহের মাধ্যমে আবার লুপ করুন।

আমি এটি করার জন্য একটি স্ক্রিপ্ট লিখেছি। মংগোডিবি ডক্সকে স্বতন্ত্র নথির মধ্যে স্কিমার পার্থক্য নির্বিশেষে সিএসভিতে রূপান্তর করা।

https://github.com/surya-shodan/mongoexportcsv


2

এছাড়াও আপনি যদি অভ্যন্তরীণ জসন ক্ষেত্রগুলি রফতানি করতে চান তবে ডট (। অপারেটর) ব্যবহার করুন।

JSON রেকর্ড:

{
    "_id" : "00118685076F2C77",
    "value" : {
        "userIds" : [ 
            "u1"
        ],
        "deviceId" : "dev"
}

ডট অপারেটরের সাথে মঙ্গোএক্সপোর্ট কমান্ড (মঙ্গো সংস্করণ 3.4.7 ব্যবহার করে):

./mongoexport - হোস্ট লোকালহোস্ট --db মাইডিবি - নির্বাচন মাইকোল - টাইপ = সিএসভি - আউট আউট সিএসভি - ফিল্ডস মান। ডিভাইসআইডি, মান.উজারআইডিস

আউটপুট সিএসভি:

value.deviceId,value.userIds
d1,"[""u1""]"
d2,"[""u2""]"

দ্রষ্টব্য: আপনি কোনও অ্যারে রফতানি না করে তা নিশ্চিত করুন। এটি উপরে প্রদর্শিত ক্ষেত্রের ব্যবহারকারীদের মত সিএসভি ফর্ম্যাটটিকে দূষিত করবে


0

মঙ্গোডিবি আটলাস ব্যবহারকারীদের জন্য সমাধান!

--fieldsডাবল ইনভার্টেড কোটে অন্তর্ভুক্ত কমা দ্বারা পৃথক করা ফিল্ডের নাম হিসাবে প্যারামিটার যুক্ত করুন :

--fields "<FIELD 1>,<FIELD 2>..."

এটি সম্পূর্ণ উদাহরণ:

mongoexport --host Cluster0-shard-0/shard1URL.mongodb.net:27017,shard2URL.mongodb.net:27017,shard3URL.mongodb.net:27017 --ssl --username <USERNAME> --password <PASSWORD> --authenticationDatabase admin --db <DB NAME> --collection <COLLECTION NAME> --type <OUTPUT FILE TYPE> --out <OUTPUT FILE NAME> --fields "<FIELD 1>,<FIELD 2>..."

0

এটি আমার জন্য কাজ করে দেখুন

mongoexport --host cluster0-shard-dummy-link.mongodb.net:27017 --db yourdbname --forceTableScan   --collection users --type json --out /var/www/html/user.json --authenticationDatabase admin --ssl --username Yourusername --password Yourpassword

উপরে ফিল্টার ফিল্ড চাইলে ব্যবহারকারী সংগ্রহের পুরো ডেটা সিএমডি ফেরত দিন - ফিল্ডস = ইমেল, নাম যুক্ত করুন


নীচের উত্তরগুলি থেকে এটি কীভাবে আলাদা?
ড্যানিয়েল ডব্লিউ।

মঙ্গোডাম্প - হোস্ট ক্লাস্টার0- শর্ট.মংগদ্বন.এফটি 7017 - ডিবি ডিবি নাম - ফোর্স টেবিলস্ক্যান - আউট / ভার / www / এইচটিএমএল / ডকুমেন্টস / ডিবি-12-2020 - স্বীকৃতি ডেটাবেস অ্যাডমিন - এসএসএল - ব্যবহারকারী নাম আপনার নাম - পাসওয়ার্ড আপনার পাসওয়ার্ড আপনি এটি চেষ্টা করতে পারেন এটি আপনাকে পুরো সংগ্রহ দেয়।
মনোজ পটেল

0

মঙ্গো সহ একটি ডকার পাত্রে রিমোট করার জন্য আমার পক্ষে কাজ করে: ৪.২.।

mongoexport -h mongodb:27017 --authenticationDatabase=admin -u username -p password -d database -c collection -q {"created_date": { "$gte": { "$date": "2020-08-03T00:00:00.000Z" }, "$lt": { "$date": "2020-08-09T23:59:59.999Z" } } } --fields=somefield1,somefield2 --type=csv --out=/archive.csv

-1

যারা ত্রুটি করে আটকে আছেন তাদের জন্য।

আমি আপনাকে ছেলেদের এর সংক্ষিপ্ত ব্যাখ্যা দিয়ে একটি সমাধান দিতে দাও: -

সংযোগ করতে আদেশ: -

mongoexport --host your_host --port your_port -u your_username -p your_password --db your_db --collection your_collection --type=csv --out file_name.csv --fields all_the_fields --authenticationDatabase admin

- হোস্ট -> মঙ্গো সার্ভারের হোস্ট

--port -> মঙ্গো সার্ভারের বন্দর

-u -> ব্যবহারকারীর নাম

-p -> পাসওয়ার্ড

--db -> db যেখান থেকে আপনি রফতানি করতে চান

--colલેક્શન -> সংগ্রহ আপনি রফতানি করতে চান

--type -> আমার ক্ষেত্রে সিএসভি রফতানির ধরণ

--out -> ফাইলের নাম যেখানে আপনি রফতানি করতে চান

- ক্ষেত্রগুলি -> আপনি যে সমস্ত ক্ষেত্র রফতানি করতে চান (CSV এর ক্ষেত্রে কমাগুলির মধ্যে দুটি ক্ষেত্রের নামের মধ্যে ফাঁকা স্থান দেবেন না)

--authenticationDatabase -> ডাটাবেস যেখানে আপনার ব্যবহারকারীর সমস্ত তথ্য সঞ্চিত থাকে


-2

কমান্ডের নীচে সিএসভি ফর্ম্যাটে সংগ্রহ রফতানি করতে ব্যবহৃত হয়।

দ্রষ্টব্য: naagএটি ডাটাবেস, employee1_jsonএকটি সংগ্রহ।

mongoexport --db naag--collection employee1_json --type csv --out /home/orienit/work/mongodb/employee1_csv_op1

এটিই মঙ্গডব 4 রিটার্ন: ব্যর্থ: সিএসভি মোডের একটি ফিল্ড তালিকার প্রয়োজন
শুক্রবার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.