यह एक बग से संबंधित हो सकता है जिसे hasNext()
के साथ पुनरावृति के संबंध में 1.6.0 में पेश किया गया था और getNext()
:PHP-1382
. तब से एक सुधार को v1.6<में मिला दिया गया है /कोड> शाखा
और इस सप्ताह के अंत में 1.6.1 के रूप में जारी किया जाना चाहिए।
उस ने कहा, hasNext()
. के बारे में बग वास्तव में यह था कि परिणाम सेट में अंतिम दस्तावेज़ पुनरावृत्ति करते समय छूट जाएगा। यदि मैं आपकी मूल स्क्रिप्ट को 1.6.0 के विरुद्ध चलाता हूं, तो सरणी में एक null
होता है इसके अंतिम तत्व के रूप में मूल्य। जगह में सुधार के साथ, सरणी में अपेक्षित सभी दस्तावेज़ होंगे। आप जो अपवाद देख रहे हैं उसे मैं किसी भी संस्करण के साथ पुन:पेश नहीं कर सकता।
यह अपवाद वास्तव में सी डेटा संरचनाओं पर आंतरिक जांच से फेंक दिया गया है, यह सुनिश्चित करने के लिए कि कर्सर ऑब्जेक्ट मोंगो क्लाइंट और सॉकेट कनेक्शन से ठीक से जुड़ा हुआ है। देखें MONGO_CHECK_INITIALIZED()
इस फ़ाइल
में मैक्रो कॉल करता है . अधिकांश कर्सर विधियाँ जाँचती हैं कि एक MongoClient संबद्ध है, लेकिन hasNext()
इसमें अद्वितीय है कि यह सॉकेट ऑब्जेक्ट की भी जांच करता है (मेरा मानना है कि अन्य विधियां मान लें कि मोंगो क्लाइंट के साथ एक कर्सर भी सॉकेट है)। यदि वह अपवाद वास्तव में आपके लिए पुनरुत्पादित है और आप एक्सटेंशन के साथ कुछ डिबगिंग करने के इच्छुक हैं, तो मुझे यह जानने में बहुत दिलचस्पी होगी कि दोनों में से कौन सा चेक त्रुटि फेंक रहा है।
एक साइड नोट के रूप में, आपको "replicaSet"
. भी निर्दिष्ट करना चाहिए MongoClient का निर्माण करते समय विकल्प। इसमें प्रतिकृति सेट नाम होना चाहिए, जो यह सुनिश्चित करता है कि ड्राइवर मेजबानों से कनेक्शन को ठीक से अनदेखा कर सकता है जो इच्छित प्रतिकृति सेट के सदस्य नहीं हैं।