उदाहरण के लिए, अगर मैं खोल में ऐसाC++ ड्राइवर का उपयोग कर वेक्टर में mongodb सरणी को कैसे सहेजना है?
> db.numbers.save({ name: "fibonacci", arr: [0, 1, 1, 2, 3, 5, 8, 13, 21] })
तब मैं अपने C++ कार्यक्रम में arr
प्राप्त करना चाहते हैं।
के बाद मैं BSONObj मिला मैं
std::string name = p.getStringField("name");
जहां p
एक BSON वस्तु है साथ name
मिल सकती है।
लेकिन सरणी से तत्व प्राप्त करने और उन्हें std :: vector में सहेजने का सही तरीका क्या है?
संपादित करें:
कुछ और अनुसंधान के बाद मैं BSONElement Doxygen प्रलेखन पाया जाता है और यह बना दिया।
std::vector<int> arr;
std::vector<BSONElement> v = p.getField("arr").Array();
for(std::vector<BSONElement>::iterator it = v.begin(); it != v.end(); ++it)
arr.push_back(it->numberInt());
लेकिन मुझे अभी भी यह सुनिश्चित नहीं है कि यह सही तरीका है या नहीं।
मुझे आशा है कि पहला फॉर्म उतना बेहतर होगा जितना कि लोड होने के लिए सामानों का सेट बड़ा हो जाएगा, क्योंकि कार्यान्वयन में वेक्टर के अंतिम आकार के साथ 'बूस्ट :: वेक्टर <> :: रिजर्व() 'को कॉल करने का मौका है। – lurscher
वास्तव में, यह नहीं है। बीएसओएन प्रारूप के तरीके के कारण, यह जानने का कोई तरीका नहीं है कि किसी ऑब्जेक्ट/सरणी में इसके बिना पुनरावृत्त किए जाने के कितने तत्व हैं। यदि आप vals के कार्यान्वयन को देखते हैं, तो आप देखेंगे कि यह लगभग दूसरे संस्करण के समान है। इसमें क्या मतभेद हैं, वास्तव में इसे धीमे (थोड़ा) धीमा करने की अधिक संभावना होगी, लेकिन इससे कोई फर्क नहीं पड़ता। – mstearn
ओह, यह बहुत बुरा है। – lurscher