বিশেষত, আমি একটি ফাইলটিতে একটি মংডব এর ফলাফল মুদ্রণ করতে চাই find()
। JSON অবজেক্টটি খুব বড় তাই আমি শেল উইন্ডো আকারের সাহায্যে পুরো অবজেক্টটি দেখতে পারছি না।
উত্তর:
শেলটি কিছু সুন্দর তবে লুকানো বৈশিষ্ট্য সরবরাহ করে কারণ এটি একটি ইন্টারেক্টিভ পরিবেশ।
আপনি যখন জাভাস্ক্রিপ্ট ফাইল থেকে কমান্ডগুলি মঙ্গো কমান্ডের মাধ্যমে চালনা করেন 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
।
যেহেতু আপনি টার্মিনালে এটি করছেন এবং কেবল একটি বুদ্ধিমান পদ্ধতিতে রেকর্ডটি পরীক্ষা করতে চান, আপনি এই জাতীয় কৌশল ব্যবহার করতে পারেন:
mongo | tee somefile
সেশনটি সাধারণ হিসাবে ব্যবহার করুন - db.collection.find().pretty()
বা আপনার যা কিছু করতে হবে, দীর্ঘ আউটপুট উপেক্ষা করুন এবং প্রস্থান করুন। আপনার অধিবেশনটির tee
লিখিত ফাইলটিতে একটি প্রতিলিপি থাকবে ।
মনোযোগ দিন যে আউটপুটে একটি ইন্টারেক্টিভ সেশনের প্রত্যাশা মোঙ্গো শেলের কারণে আউটপুটটিতে পালানোর ক্রম এবং অন্যান্য আবর্জনা থাকতে পারে। less
এগুলি করুণভাবে পরিচালনা করে
আপনি যে ফাইলটি চালাতে চান সেই আদেশগুলি কেবল রাখুন, তারপরে এটি ডাটাবেসের নামের সাথে শেলটিতে দিন এবং আউটপুটটিকে কোনও ফাইলে পুনর্নির্দেশ করুন। সুতরাং, যদি আপনার ফাইন্ড কমান্ডটি থাকে find.js
এবং আপনার ডাটাবেসটি থাকে তবে foo
এটি দেখতে এটির মতো হবে:
./mongo foo find.js >> out.json
out.json
। mongo foo < find.js > out.json
কাজ করেছে।
আপনার ক্যোয়ারী (উদাহরণস্বরূপ db.someCollection.find().pretty()
) একটি জাভাস্ক্রিপ্ট ফাইলে রাখুন, আসুন বলি query.js
। তারপরে কমান্ডটি ব্যবহার করে এটি আপনার অপারেটিং সিস্টেমের শেলের মধ্যে চালাও:
mongo yourDb < query.js > outputFile
অনুসন্ধান ফলাফল 'আউটপুটফাইলে' নামের ফাইলটিতে থাকবে file
ডিফল্টরূপে মঙ্গো প্রথম 20 টি নথি আইআইআরসি প্রিন্ট করে। আপনি যদি আরও চান তবে আপনি মোংগো শেলের ব্যাচের আকারের জন্য নতুন মান নির্ধারণ করতে পারেন, যেমন
DBQuery.shellBatchSize = 100
।
.js
এক্সটেনশন দ্বারা ভুল নির্দেশনা দেওয়া হবে না । আপনি এগুলি পরিবর্তন না করে nice সমস্ত সুন্দর মঙ্গো শেল কোয়েরি লিখতে পারেন।
ব্যবহার print
এবং JSON.stringify
আপনি কেবল একটি বৈধ JSON
ফলাফল উত্পাদন করতে পারেন । আউটপুট থেকে শেল শোর ফিল্টার করতে পতাকা
ব্যবহার করুন --quiet
। মূল্যায়ন এড়াতে পতাকা
ব্যবহার করুন । (আমি এটি ব্যবহার করি এমন একটি চমত্কার-ফর্ম্যাটারের কারণে আমাকে করতে হয়েছিল, যা অবৈধ JSON আউটপুট উত্পাদন করে ) পেজিং এড়ানোর জন্য প্রকৃত ফলাফলের সীমাটি প্রতিস্থাপন ব্যবহার করুন ।--norc
.mongorc.js
DBQuery.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()
);
আশাকরি এটা সাহায্য করবে!
অস্যা কমস্কির এই উত্তরটি ব্যবহার করে , আমি উইন্ডোজের জন্য এক-লাইন ব্যাটের স্ক্রিপ্ট লিখেছিলাম। লাইনটি দেখতে এমন দেখাচ্ছে:
mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json
তারপরে যে কেউ এটি চালাতে পারে:
exportToJson.bat DbName CollectionName
এছাড়াও এর জন্য মঙ্গোএক্সপোর্ট রয়েছে , তবে এটি নিশ্চিত নয় যে এটি কোন সংস্করণটি উপলব্ধ।
উদাহরণ:
mongoexport -d dbname -c collection --jsonArray --pretty --quiet --out output.json