MongoDB 3.4.9 के अनुसार, आपके द्वारा देखे गए पूर्वाग्रह का कारण यह है कि $sample
लगभग पूरी तरह से स्टोरेज इंजन के यादृच्छिक कर्सर कार्यान्वयन पर निर्भर करता है (देखें SERVER-19183
) ऐसा इसलिए किया जाता है ताकि $sample
संग्रह में बहुत अधिक डेटा होने पर प्रदर्शनकारी हो सकता है। हालांकि, चूंकि स्टोरेज इंजन बी-ट्री प्रकार के कार्यान्वयन का उपयोग करके दस्तावेजों को क्रमबद्ध क्रम में संग्रहीत करता है, इसलिए वास्तव में यादृच्छिक परिणाम बनाना हमेशा संभव नहीं होता है।
बेहतर $sample
. के लिए वर्तमान में दो सुविधा अनुरोध हैं यांत्रिकी, अर्थात् SERVER-22069
और SERVER-22068
।
ऐसा कहने के बाद, यदि आपको अपने डेटा के वास्तव में निष्पक्ष नमूने की आवश्यकता है, तो अपना खुद का $sample
रोल करें -समान समाधान इस बिंदु पर आगे बढ़ने का सबसे अच्छा तरीका है। कुछ इस तरह:
- सभी की सूची प्राप्त करें
_id
संग्रह में। - इस सूची पर एक यादृच्छिक नमूनाकरण करें (उदाहरण के लिए पायथन के random का उपयोग करना .पसंद )।
- नमूना किए गए
_id
. का उपयोग करके सभी प्रासंगिक दस्तावेज़ प्राप्त करें , जो आपके इच्छित नमूना आकार के आधार पर उचित रूप से प्रदर्शनकारी होगा, क्योंकि_id
हमेशा अनुक्रमित होता है।