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

मोंगोकक्स सी ++ ड्राइवर का उपयोग करके मोंगोडब दस्तावेज़ों को दोबारा कैसे उत्पन्न करें?

आपके द्वारा पोस्ट किए गए सेगमेंट के संदर्भ को देखे बिना यह सुनिश्चित करना कठिन है, लेकिन ऐसा लगता है कि आप जिस समस्या का सामना कर रहे हैं वह << के आउटपुट प्रकार के साथ है स्ट्रीम बिल्डर पर ऑपरेटर। स्ट्रीम बिल्डर का वास्तव में गलत नाम है; यह शब्द के विशिष्ट C++ अर्थ में "स्ट्रीम" नहीं है, क्योंकि आउटपुट प्रकार << है ऑपरेटर कभी-कभी लेफ्ट-हैंड-साइड ऑपरेंड से अलग होगा। विशेष रूप से, जब भी आप open_document . जैसी किसी चीज़ का उपयोग करते हैं या close_document , जिस प्रकार से एक्सप्रेशन आउटपुट करता है वह लेफ्ट-हैंड-साइड ऑपरेंड से भिन्न होगा। इस वजह से, आपको आम तौर पर इनमें से किसी एक एक्सप्रेशन के आउटपुट को स्टोर करने की आवश्यकता होगी।

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

यहां बताया गया है कि आप मूल निर्माता के साथ उसी दस्तावेज़ का निर्माण कैसे करेंगे:

#include <bsoncxx/builder/basic/document.hpp>
#include <bsoncxx/builder/basic/kvp.hpp>
#include <bsoncxx/builder/basic/sub_document.hpp>

using bsoncxx::builder::basic::kvp;
using bsoncxx::builder::basic::sub_document;

bsoncxx::builder::basic::document doc;

// Build the document
doc.append(kvp("MainType", [](sub_document sub_doc1) {
    sub_doc1.append(kvp("TLSRecord", [](sub_document sub_doc2) {
        sub_doc2.append(kvp("type", "16"),
                        kvp("version", "0301"),
                        kvp("length", "012C"),
                        kvp("hsMsg", [](sub_document sub_doc3) {
                            sub_doc3.append(kvp("type", "01"),
                                            kvp("length", "000128"),
                                            kvp("clientHello", [](sub_document sub_doc4) {
                                                sub_doc4.append(
                                                    kvp("version", "0303"),
                                                    kvp("random", "40C70E243001B96D8C"),
                                                    kvp("session_id_length", ""));
                                            }));
                        }));
    }));
}));

// Get a view of the document being built and do something with it.
do_something_with_document_view(doc.view());

// Extract the document from the builder and do something with it.
do_something_with_owned_document(doc.extract());

bsoncxx::builder::basic::document::append kvp . की मनमानी संख्या लेता है (कुंजी-मूल्य जोड़े) और उन्हें निर्माता के साथ जोड़ देता है। स्ट्रिंग्स जैसे बुनियादी प्रकारों के लिए, आप मान को दूसरे तर्क के रूप में पास कर सकते हैं। उप-दस्तावेज़ बनाने के लिए, दूसरे तर्क के रूप में लैम्ब्डा का उपयोग करें जो एक bsoncxx::builder::basic::sub_document लेता है और फिर उसी तरह उस उप-दस्तावेज़ निर्माता में संलग्न करें।

दस्तावेज़ को बिल्डर से बाहर निकालने के लिए, आप या तो view() . का उपयोग कर सकते हैं या extract() तरीके। view() एक bsoncxx::document::view() returns देता है , जो दस्तावेज़ का एक अज्ञात दृश्य है; दृश्य का उपयोग करने के लिए बिल्डर को पूरे समय जीवित रहने की आवश्यकता होती है। extract() एक bsoncxx::document::value लौटाता है, जो एक स्वामित्व वाला मूल्य है; जब extract() कहा जाता है, बिल्डर को वापस खाली स्थिति में रीसेट कर दिया जाता है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb को djongo (Django) से कनेक्ट करें

  2. कस्टम फ़ंक्शन परिकलित कॉलम मोंगोडब प्रोजेक्शन

  3. फ़ील्ड $name एक संचायक वस्तु होना चाहिए

  4. MongoDB:किसी फ़ील्ड की गणना कैसे करें यदि उसका मान किसी शर्त से मेल खाता है?

  5. रीबूट के बाद टूटा हुआ मोंगो डॉकर सेटअप (रास्पबेरी पीआई पर यूनिफी नियंत्रक)