কোনও ফাইলটিতে মোংগোডিবি শেল আউটপুট প্রিন্ট করার কোনও উপায় আছে কি?


103

বিশেষত, আমি একটি ফাইলটিতে একটি মংডব এর ফলাফল মুদ্রণ করতে চাই find()। JSON অবজেক্টটি খুব বড় তাই আমি শেল উইন্ডো আকারের সাহায্যে পুরো অবজেক্টটি দেখতে পারছি না।

উত্তর:


218

শেলটি কিছু সুন্দর তবে লুকানো বৈশিষ্ট্য সরবরাহ করে কারণ এটি একটি ইন্টারেক্টিভ পরিবেশ।

আপনি যখন জাভাস্ক্রিপ্ট ফাইল থেকে কমান্ডগুলি মঙ্গো কমান্ডের মাধ্যমে চালনা করেন j

এটি প্রায় দুটি উপায় আছে।

(1) শেলটি জাল করুন এবং এটি ভাবুন যে আপনি ইন্টারেক্টিভ মোডে আছেন

$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF

বা
(2) জাভাস্ক্রিপ্ট ব্যবহার করে একটি ফলাফল find()মুদ্রণযোগ্য জেএসএনে অনুবাদ করতে

mongo dbname command.js > output.json

যেখানে কমান্ড.js এ এটি (বা এর সমতুল্য) রয়েছে:

printjson( db.collection.find().toArray() )

এটি ফলাফলের অ্যারেটি খুব সুন্দরভাবে মুদ্রণ করবে, সহ [ ]- আপনি যদি না চান যে আপনি অ্যারে এবং printjson()প্রতিটি উপাদান দিয়ে পুনরাবৃত্তি করতে পারেন ।

যাইহোক, আপনি যদি কেবল একটি জাভাস্ক্রিপ্ট বিবৃতি চালাচ্ছেন তবে আপনাকে এটিকে কোনও ফাইলে রাখতে হবে না এবং পরিবর্তে আপনি ব্যবহার করতে পারেন:

$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json

কমান্ড.জেএস একটি পঠনযোগ্য ফাইল হতে হবে যা আপনার বর্তমান ডিরেক্টরিতে বিদ্যমান এবং এটিতে যে জাভাস্ক্রিপ্টটি চালাতে চান তা রয়েছে।
অস্যা কামস্কি

আমি কীভাবে এটি একটি দূরবর্তী মঙ্গো ডিবিয়ের জন্য করব? আমি চেষ্টা করেছি mongo blah.mongolab.com:33478/blah -u user -p pass --eval "my query" >> dump.txtকিন্তু তা আমাকে দিয়েছে JavaScript execution failed: SyntaxError: Unexpected token ILLEGAL
শেহেরিয়ার

সেই ত্রুটিটির অর্থ - সপ্তাহের পরে আপনার উদ্ধৃতিগুলির ভিতরে যা আছে তা আইনী বাক্য গঠন নয়। আমি সম্পূর্ণ এক্সপ্রেশন এর বাইরে একক উদ্ধৃতি ব্যবহার করার পরামর্শ দিচ্ছি এবং যদি এর অভ্যন্তরের উদ্ধৃতিগুলির প্রয়োজন হয় তবে এটির জন্য ডাবল উদ্ধৃতি ব্যবহার করুন।
অস্যা কামস্কি

4
অপশন 2 সত্যিই একমাত্র বিকল্প যদি আপনার হাতে কয়েকটা ফলাফল পাওয়া যায়, যেহেতু 1 বিকল্পের মধ্যে এটি কেবল "এটি" টাইপ করুন আরও বেশি করে থামবে।
টমটি

4
সত্যই @ টমটি নয় - শেলের ব্যাচের আকার শেলের ভিতরে একটি ভেরিয়েবলের সাথে নিয়ন্ত্রণযোগ্য। আপনি আপনার .mongodbrc.js ফাইলে DBQuery.shellBatchSize = 10000 করা এবং তা পর 10000 ফলাফল পরিবর্তে 20 "স্টপ"
Asya Kamsky

30

যেহেতু আপনি টার্মিনালে এটি করছেন এবং কেবল একটি বুদ্ধিমান পদ্ধতিতে রেকর্ডটি পরীক্ষা করতে চান, আপনি এই জাতীয় কৌশল ব্যবহার করতে পারেন:

mongo | tee somefile

সেশনটি সাধারণ হিসাবে ব্যবহার করুন - db.collection.find().pretty()বা আপনার যা কিছু করতে হবে, দীর্ঘ আউটপুট উপেক্ষা করুন এবং প্রস্থান করুন। আপনার অধিবেশনটির teeলিখিত ফাইলটিতে একটি প্রতিলিপি থাকবে ।

মনোযোগ দিন যে আউটপুটে একটি ইন্টারেক্টিভ সেশনের প্রত্যাশা মোঙ্গো শেলের কারণে আউটপুটটিতে পালানোর ক্রম এবং অন্যান্য আবর্জনা থাকতে পারে। lessএগুলি করুণভাবে পরিচালনা করে


13

আপনি যে ফাইলটি চালাতে চান সেই আদেশগুলি কেবল রাখুন, তারপরে এটি ডাটাবেসের নামের সাথে শেলটিতে দিন এবং আউটপুটটিকে কোনও ফাইলে পুনর্নির্দেশ করুন। সুতরাং, যদি আপনার ফাইন্ড কমান্ডটি থাকে find.jsএবং আপনার ডাটাবেসটি থাকে তবে fooএটি দেখতে এটির মতো হবে:

./mongo foo find.js >> out.json

এটি আমার পক্ষে কার্যকর হয়নি, কেবল শেল সংস্করণ এবং ডিবি নাম ছাপিয়েছে out.jsonmongo foo < find.js > out.jsonকাজ করেছে।
জেমস ব্রাউন

4
এই উত্তরটি গো এবং বহু সংস্করণ আগে সরঞ্জামগুলিতে পুনরায় লেখার আগে লেখা হয়েছিল, যদি আপনি খুব পুরানো কিছু ব্যবহার না করেন, তবে সম্ভবত এটি আপনার পক্ষে কাজ করছে না
অ্যাডাম কমারফোর্ড

11

আপনার ক্যোয়ারী (উদাহরণস্বরূপ db.someCollection.find().pretty()) একটি জাভাস্ক্রিপ্ট ফাইলে রাখুন, আসুন বলি query.js। তারপরে কমান্ডটি ব্যবহার করে এটি আপনার অপারেটিং সিস্টেমের শেলের মধ্যে চালাও:

mongo yourDb < query.js > outputFile

অনুসন্ধান ফলাফল 'আউটপুটফাইলে' নামের ফাইলটিতে থাকবে file

ডিফল্টরূপে মঙ্গো প্রথম 20 টি নথি আইআইআরসি প্রিন্ট করে। আপনি যদি আরও চান তবে আপনি মোংগো শেলের ব্যাচের আকারের জন্য নতুন মান নির্ধারণ করতে পারেন, যেমন

DBQuery.shellBatchSize = 100


এই. .jsএক্সটেনশন দ্বারা ভুল নির্দেশনা দেওয়া হবে না । আপনি এগুলি পরিবর্তন না করে nice সমস্ত সুন্দর মঙ্গো শেল কোয়েরি লিখতে পারেন।
AD

5

ব্যবহার printএবং JSON.stringifyআপনি কেবল একটি বৈধ JSON ফলাফল উত্পাদন করতে পারেন । আউটপুট থেকে শেল শোর ফিল্টার করতে পতাকা
ব্যবহার করুন --quiet। মূল্যায়ন এড়াতে পতাকা
ব্যবহার করুন । (আমি এটি ব্যবহার করি এমন একটি চমত্কার-ফর্ম্যাটারের কারণে আমাকে করতে হয়েছিল, যা অবৈধ JSON আউটপুট উত্পাদন করে ) পেজিং এড়ানোর জন্য প্রকৃত ফলাফলের সীমাটি প্রতিস্থাপন ব্যবহার করুন ।--norc.mongorc.jsDBQuery.shellBatchSize = ??

এবং পরিশেষে, teeটার্মিনাল আউটপুটটি একটি ফাইলে পাইপ করতে ব্যবহার করুন:

// Shell:
mongo --quiet --norc ./query.js | tee ~/my_output.json

// query.js:
DBQuery.shellBatchSize = 2000;
function toPrint(data) {
  print(JSON.stringify(data, null, 2));
}

toPrint(
  db.getCollection('myCollection').find().toArray()
);

আশাকরি এটা সাহায্য করবে!


2

অস্যা কমস্কির এই উত্তরটি ব্যবহার করে , আমি উইন্ডোজের জন্য এক-লাইন ব্যাটের স্ক্রিপ্ট লিখেছিলাম। লাইনটি দেখতে এমন দেখাচ্ছে:

mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json

তারপরে যে কেউ এটি চালাতে পারে:

exportToJson.bat DbName CollectionName


2

লেখার ফাইল () ফাংশন দিয়ে ফলাফল সংরক্ষণ করতে পেরেছি

> writeFile("/home/pahan/output.txt", tojson(db.myCollection.find().toArray()))

মঙ্গো শেল সংস্করণ ছিল 4.0.9


1

এছাড়াও এর জন্য মঙ্গোএক্সপোর্ট রয়েছে , তবে এটি নিশ্চিত নয় যে এটি কোন সংস্করণটি উপলব্ধ।

উদাহরণ:

mongoexport -d dbname -c collection --jsonArray --pretty --quiet --out output.json

0

নিওডান মঙ্গোএক্সপোর্টের উত্তর হিসাবে -qক্যোয়ারীর বিকল্প রয়েছে। এটি ObjectIdJSON এর মানক বিন্যাসে রূপান্তর করে "$oid"। যেমন:

mongoexport -d yourdb -c yourcol --jsonArray --pretty -q '{"field": "filter value"}' -o output.json

0

আপনি এই আদেশটি ব্যবহার করতে এই আদেশটি ব্যবহার করতে পারেন:

mongo admin -u <userName> -p <password> --quiet --eval "cursor = rs.status(); printjson(cursor)" > output.json

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