MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

क्या मैं नोड-मोंगोडब-देशी ड्राइवर में कच्ची मोंगोडीबी क्वेरी निष्पादित कर सकता हूं?

नोट:प्रश्न बदल गया है - नीचे अपडेट देखें।

मूल उत्तर:

हाँ।

इसके बजाय:

db.tableName.find({ col: 'value' })

आप इसे इस प्रकार उपयोग करते हैं:

db.collection('tableName').find({ col: 'value' }, (err, data) => {
    if (err) {
        // handle error
    } else {
        // you have data here
    }
});

देखें:http://mongodb.github.io /node-mongodb-native/2.2/api/Collection.html#find

अपडेट करें

जब आपने अपना प्रश्न बदल दिया और कुछ टिप्पणियां पोस्ट कर दीं तो यह अधिक स्पष्ट हो गया कि आप क्या करना चाहते हैं।

नोड में मोंगो शेल का अनुकरण करने के अपने लक्ष्य को प्राप्त करने के लिए आपको उपयोगकर्ता द्वारा टाइप की गई कमांड को पार्स करना होगा और ध्यान में रखते हुए उपयुक्त कमांड को निष्पादित करना होगा:

  1. मोंगो शेल द्वारा उपयोग किए जाने वाले स्पाइडरमोन्की और वी8 और लिबव के साथ नोड के बीच का अंतर
  2. बीएसओएन और जेएसओएन के बीच अंतर
  3. तथ्य यह है कि मोंगो शेल समकालिक रूप से काम करता है और नोड ड्राइवर अतुल्यकालिक रूप से काम करता है

आखिरी हिस्सा शायद आपके लिए सबसे कठिन हिस्सा होगा। याद रखें कि मोंगो शेल में यह पूरी तरह से कानूनी है:

db.test.find()[0].x;

नोड में .find() विधि मान वापस नहीं करती है, लेकिन यह या तो कॉलबैक लेती है या एक वादा लौटाती है। यह पेचीदा होगा। db.test.find()[0].x; वादों के साथ मामले को संभालना अपेक्षाकृत आसान हो सकता है (यदि आप वादों को अच्छी तरह समझते हैं) लेकिन यह कठिन होगा:

db.test.find({x: db.test.find()[0].x});

और याद रखें कि आपको मनमाने ढंग से नेस्टेड स्तरों को संभालने की आवश्यकता है।

मोंगो प्रोटोकॉल

कुछ टिप्पणियों को पढ़ने के बाद मुझे लगता है कि यह ध्यान देने योग्य है कि आप वास्तव में मोंगो सर्वर को जो भेजते हैं उसका उस जावास्क्रिप्ट से कोई लेना-देना नहीं है जिसे आप मोंगो शेल में लिखते हैं। मोंगो शेल कई पूर्वनिर्धारित कार्यों और वस्तुओं के साथ स्पाइडरमोन्की का उपयोग करता है।

लेकिन आप वास्तव में मोंगो सर्वर पर जावास्क्रिप्ट नहीं भेजते हैं, इसलिए आप db.collection.find() जैसी चीजें नहीं भेज सकते हैं। . बल्कि आप एक बाइनरी OP_QUERY send भेजें एक संग्रह नाम के साथ संरचना को एक सीस्ट्रिंग के रूप में एन्कोड किया गया है और बीएसओएन के रूप में एन्कोड की गई एक क्वेरी और बाइनरी झंडे का एक गुच्छा। देखें:

बीएसओएन स्वयं एक बाइनरी प्रारूप है जिसमें बाइट्स के रूप में परिभाषित कई निम्न स्तर के मान हैं:

लब्बोलुआब यह है कि आप मोंगो सर्वर को कुछ भी नहीं भेजते हैं जो आप मोंगो शेल में दर्ज करते हैं। मोंगो शेल स्पाइडरमोन्की पार्सर का उपयोग करके आपके द्वारा टाइप की जाने वाली चीजों को पार्स करता है और वास्तविक मोंगो सर्वर को बाइनरी अनुरोध भेजता है। Mongo शेल JavaScript का उपयोग करता है लेकिन आप JavaScript में Mongo सर्वर से संचार नहीं करते हैं।

उदाहरण

यहां तक ​​​​कि JSON क्वेरी ऑब्जेक्ट को JSON के रूप में Mongo को नहीं भेजा जाता है। उदाहरण के लिए, जब आप hello . के साथ कोई दस्तावेज़ खोज रहे हों आप "दुनिया" के बराबर संपत्ति का उपयोग करेंगे {hello: 'world'} जावास्क्रिप्ट में या {"hello": "world"} . में JSON में लेकिन यह वही है जो Mongo सर्वर को भेजा जाता है - Mongo शेल या किसी अन्य Mongo क्लाइंट द्वारा:

\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00   

यह इतना अलग क्यों है

यह समझने के लिए कि नोड में प्रयुक्त सिंटैक्स मोंगो शेल से इतना अलग क्यों है, यह उत्तर देखें:




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला दस्तावेज़ों के बजाय जेसन ऑब्जेक्ट्स की सरणी कैसे प्राप्त करें?

  2. बहुभुज GeoJSON ऑब्जेक्ट्स के निर्देशांक सरणी की एक सरणी में क्यों संग्रहीत किए जाते हैं?

  3. MongoDB:ऑटो जेनरेट किए गए ऑब्जेक्ट आईडी के बजाय विशिष्ट आईडी वाले दस्तावेज़ डालें

  4. उल्का संग्रह में एक क्षण वस्तु सम्मिलित करना

  5. बिना किसी समूह के मोंगो औसत एकत्रीकरण क्वेरी