दिलचस्प पोस्ट
ब्राउज़र खोलने के बिना क्या सीआईएल से गिटहब पर एक दूरस्थ रेपो तैयार करना संभव है? क्या आईओ-बाउंड ऑपरेशन के लिए मल्टीथ्रेडिंग का मतलब है? जावा से चींटी चलाएं उच्च आयामी डेटा में निकटतम पड़ोसियों? सेटरोटेशन (90) चित्र मोड में चित्र लेने के लिए सैमसंग उपकरणों पर काम नहीं करता है आईओएस एप सबमिशन: 64-बिट समर्थन लापता सी # का उपयोग करते हुए Excel फ़ाइल के डेटा को कैसे पढ़ें? Google Drive Android API में DriveId.getResourceId () का अप्रत्याशित परिणाम जब गतिविधि / टुकड़ा रोका गया है, तब हैंडलर संदेशों को कैसे संभालना है हाइबरनेट वैलिएटर (JSR 303) के साथ क्रॉस फील्ड मान्यता पायथन में पिछले एसटीडीओयूटी लाइन को हटा दें कम से कम महत्वपूर्ण बिट की स्थिति जो सेट है मैट्रिक्स में एन के सबसे बड़े तत्वों के सूचकांक प्राप्त करें पायथन का उपयोग करके HTML को पार्स करना Asp.net में सबसे अच्छा तरीका एक पूरी साइट के लिए https को लागू करने के लिए?

शैल लिपियों के माध्यम से मोंगो कमांड को कैसे निष्पादित करें?

मैं शेल लिपि में मोंगो कमांड को निष्पादित करना चाहता हूं।

मैंने निम्नलिखित तरीके test.sh कोिश की

#!/bin/sh mongo myDbName db.mycollection.findOne() show collections 

जब मैं लिपि ऊपर निष्पादित ./test.sh

फिर मोंगो कनेक्शन स्थापित हुआ लेकिन अगले आदेशों को निष्पादित नहीं किया गया

श स्क्रिप्ट [test.sh] के माध्यम से अन्य कमांडों को कैसे निष्पादित करें?

कृपया मेरी मदद करें

वेब के समाधान से एकत्रित समाधान "शैल लिपियों के माध्यम से मोंगो कमांड को कैसे निष्पादित करें?"

आप --eval ध्वज का उपयोग करके कमांड का मूल्यांकन भी कर सकते हैं, अगर यह सिर्फ एक कमांड है

 mongo --eval "printjson(db.serverStatus())" 

कृपया ध्यान दें: यदि आप मोंगो ऑपरेटर्स का प्रयोग कर रहे हैं, तो $ साइन से शुरू करते हुए, आप खोलने के तर्क को सिंगल कोट्स में चारों ओर घेरे रखना चाहते हैं ताकि शेल को पर्यावरण चर के रूप में ऑपरेटर का मूल्यांकन करने के लिए रखा जा सके।

 mongo --eval 'db.test.update({"name":"foo"},{$set:{"this":"that"}});' 

अन्यथा आप ऐसा कुछ देख सकते हैं:

 mongo --eval "db.test.update({\"name\":\"foo\"},{$set:{\"this\":\"that\"}});" > E QUERY SyntaxError: Unexpected token : 

अपनी माँगो स्क्रिप्ट को .js फ़ाइल में रखें।

फिर mongo < yourFile.js निष्पादित करें

उदाहरण के लिए:

demo.js // फ़ाइल में आपकी स्क्रिप्ट है

 use sample //db name show collections 

इस फ़ाइल को "c: \ db-scripts" में रखें

फिर सीएमडी प्रॉम्प्ट में "c: \ db-scripts" पर जाएं

 C:\db-scripts>mongo < demo.js 

यह कोड को कोड में निष्पादित करेगा और आउटपुट दिखाएगा

 C:\db-scripts>mongo < demo.js Mongo shell version: 3.0.4 Connecting to: test switched to db sample users //collection name tasks //collection name bye C:\db-scripts> 

यह लिनक्स के अंतर्गत मेरे लिए काम करता है:

 mongo < script.js 

इसे test.js नामक एक फ़ाइल में रखें:

 db.mycollection.findOne() db.getCollectionNames().forEach(function(collection) { print(collection); }); 

फिर इसे mongo myDbName test.js साथ mongo myDbName test.js

इसके बारे में एक आधिकारिक दस्तावेज पृष्ठ भी है

उस पृष्ठ के उदाहरणों में शामिल हैं:

 mongo server:27017/dbname --quiet my_commands.js mongo test --eval "printjson(db.getCollectionNames())" 

नीचे दिए गए शैल स्क्रिप्ट मेरे लिए अच्छी तरह से काम भी कर रहा था … निश्चित रूप से इस बात का इस्तेमाल किया गया था कि एंटोनिन ने पहले उल्लेख किया था … जिसने मुझे यहां दस्तावेज़ का परीक्षण करने का विचार दिया।

 function testMongoScript { mongo <<EOF use mydb db.leads.findOne() db.leads.find().count() EOF } 

मेरे सेटअप में मुझे इसका उपयोग करना होगा:

 mongo --host="the.server.ip:port" databaseName theScript.js 

इस बारे में कैसा है:

 echo "db.mycollection.findOne()" | mongo myDbName echo "show collections" | mongo myDbName 

मैं "हेरेडॉक" वाक्यविन्यास का उपयोग करता हूं, जिसमें डेविड यंग का उल्लेख है। लेकिन वहां एक जाल है:

 #!/usr/bin/sh mongo <db> <<EOF db.<collection>.find({ fieldName: { $exists: true } }) .forEach( printjson ); EOF 

उपरोक्त काम नहीं करेगा, क्योंकि वाक्यांश "$ मौजूद है" शेल द्वारा देखा जाएगा और "मौजूद है" नामित पर्यावरण चर के मान के साथ प्रतिस्थापित किया जाएगा। कौन सा, संभवतः मौजूद नहीं है, इसलिए शेल विस्तार के बाद, यह हो जाता है:

 #!/usr/bin/sh mongo <db> <<EOF db.<collection>.find({ fieldName: { : true } }) .forEach( printjson ); EOF 

इसे पार करने के लिए आपके पास दो विकल्प हैं एक बदसूरत है, एक बहुत अच्छा है। सबसे पहले, बदसूरत एक: बचने के $ संकेत:

 #!/usr/bin/sh mongo <db> <<EOF db.<collection>.find({ fieldName: { \$exists: true } }) .forEach( printjson ); EOF 

मैं यह सलाह नहीं देता, क्योंकि बचने में भूल जाना आसान है

दूसरा विकल्प इस तरह से ईओफ़ से बचने के लिए है:

 #!/usr/bin/sh mongo <db> <<\EOF db.<collection>.find({ fieldName: { $exists: true } }) .forEach( printjson ); EOF 

अब, आप अपने हेरडॉक में दिए गए सभी डॉलर के संकेत डाल सकते हैं, और डॉलर के संकेतों को नजरअंदाज कर दिया जाता है। नीचे की ओर: यदि आप अपने मानो लिपि में शैल पैरामीटर / वेरिएबल डालते हैं तो यह काम नहीं करेगा।

एक अन्य विकल्प जो आप के साथ खेल सकते हैं वह आपके शेबांग के साथ गड़बड़ है उदाहरण के लिए,

 #!/bin/env mongo <some mongo stuff> 

इस समाधान के साथ कई समस्याएं हैं:

  1. यह केवल तभी काम करता है जब आप कमांड लाइन से एक मौंगू शेल स्क्रिप्ट निष्पादन योग्य बनाने का प्रयास कर रहे हैं। आप नियमित शेल कमानों को मोंगो शेल कमानों के साथ मिश्रण नहीं कर सकते। और ऐसा करने से आप जो भी बचाते हैं, उसे कमांड लाइन पर "मोंगो" नहीं लिखना पड़ता है … (पर्याप्त कारण, बिल्कुल)

  2. यह बिल्कुल "मोंगो <some-js-file>" जैसा कार्य करता है जिसका अर्थ है कि यह आपको "उपयोग <db>" कमांड का उपयोग करने नहीं देता है

मैंने शेबांग को डेटाबेस नाम जोड़ने की कोशिश की है, जिसे आप सोचेंगे कि काम करेंगे दुर्भाग्य से, जिस तरह से सिस्टम शेबांग लाइन को संसाधित करती है, पहले स्थान के बाद सब कुछ env कमांड में एक पैरामीटर (जैसे उद्धृत) के रूप में पारित किया जाता है, और env इसे खोजने और चलाने में विफल रहता है।

इसके बजाय, आपको स्क्रिप्ट के भीतर डेटाबेस परिवर्तन भी एम्बेड करना होगा, जैसे:

 #!/bin/env mongo db = db.getSiblingDB('<db>'); <your script> 

जीवन में किसी चीज़ के साथ, "यह करने के लिए एक से अधिक तरीका है!"

धन्यवाद printf ! एक लिनक्स पर्यावरण में, शो के लिए केवल एक फाइल चलाने का एक बेहतर तरीका है। कहें कि आपके पास दो फाइल हैं, mongoCmds.js एकाधिक कमांड्स के साथ:

 use someDb db.someColl.find() 

और फिर चालक शेल फ़ाइल, runMongoCmds.sh

 mongo < mongoCmds.js 

इसके बजाय, केवल एक फाइल है, जिसमें रनिंग मॉंगो सीएमएस

 printf "use someDb\ndb.someColl.find()" | mongo 

बैश का printf echo तुलना में बहुत अधिक मजबूत है और उनको कई पंक्तियों पर बल देने के लिए \n बीच की अनुमति देता है

जैसा कि theTuxRacer द्वारा सुझाया गया है, आप eval कमांड का उपयोग कर सकते हैं, जिनके लिए मैं इसे पसंद नहीं कर रहा हूं, आप अपने डीबी नाम में भी जोड़ सकते हैं यदि आप डिफ़ॉल्ट डीबी पर ऑपरेशन को प्राथमिकता देने की कोशिश नहीं कर रहे हैं।

 mongo <dbname> --eval "printjson(db.something.find())" 

–shell ध्वज का उपयोग जावास्क्रिप्ट फ़ाइलों के लिए भी किया जा सकता है

  mongo --shell /path/to/jsfile/test.js 

यदि आपके पास प्रमाणीकरण सक्षम है:

 mongo -u username -p password --authenticationDatabase auth_db_name < your_script.js 

एक स्क्रिप्ट फ़ाइल बनाएँ; कमांड लिखें:

 #!/bin/sh mongo < file.js 

file.js अपना मोंगो क्वेरी लिखें:

 db.collection.find({"myValue":null}).count(); 
 mongo db_name --eval "db.user_info.find().forEach(function(o) {print(o._id);})" 

हाल ही में मोंगोद से पोस्टग्रेज़ तक चले गए इस तरह मैं स्क्रिप्ट का इस्तेमाल किया।

 mongo < scripts.js > inserts.sql 

inserts.sql पढ़ें और आउटपुट को inserts.sql रीडायरेक्ट करें

scripts.js इस तरह दिखता है

 use myDb; var string = "INSERT INTO table(a, b) VALUES"; db.getCollection('collectionName').find({}).forEach(function (object) { string += "('" + String(object.description) + "','" + object.name + "'),"; }); print(string.substring(0, string.length - 1), ";"); 

inserts.sql इस तरह दिखता है

 INSERT INTO table(a, b) VALUES('abc', 'Alice'), ('def', 'Bob'), ('ghi', 'Claire');