क्वेरी स्वयं एक दस्तावेज़ है . MongoDB दस्तावेज़ के आकार (संस्करण 2.4.0+ के अनुसार) को 16 एमबी तक सीमित करता है।
वास्तव में, आप एक खोज के साथ क्या कर रहे हैं:
db.collectionName.find(queryDoc)
जहां 'queryDoc' कुछ इस तरह है:
{ 'fieldOne' : { $in : [ 1, 2, 3, 4] } }
किसी $in क्वेरी को दिए जा सकने वाले मानों की अधिकतम संख्या जानने के लिए, bsonsize . का उपयोग करें आदेश:
mongos> Object.bsonsize([1])
16
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4] } })
74
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5] } })
85
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6] } })
96
तो, आप देख सकते हैं कि प्रत्येक अतिरिक्त पूर्णांक आकार 11 बाइट्स है। 11 बिट नहीं, 11 बाइट। इसका कारण यह है कि बीएसओएन आंतरिक रूप से संख्याओं को कम से कम 64 बिट्स, साथ ही रैपर के रूप में संग्रहीत करता है। इसे इसके साथ आसानी से देखा जा सकता है:
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 690000000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 6900000000000000000000] } })
107
mongos> Object.bsonsize({ 'fieldOne' : { $in : [ 1, 2, 3, 4, 5, 6, 69000000000000000000000000] } })
107
इसलिए, कोई फर्क नहीं पड़ता कि किसी व्यक्तिगत संख्या का आकार क्या है, यह वही bsonsize है।
प्रश्न पर ही:वह क्वेरी दस्तावेज़ कितना बड़ा है?
इन्हें $in क्लॉज के साथ एक फ़ील्ड क्वेरी के लिए जोड़ना, pymongo में, mongos Javascript प्रॉम्प्ट के माध्यम से, जो भी हो, सभी $in क्वेरी के अधिकतम आकार के लिए समान अतिरिक्त तथ्य प्राप्त करते हैं:
mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
- क्वेरी दस्तावेज़ स्वयं 22 बाइट्स है;
- फ़ील्ड नाम का प्रत्येक बाइट एक एकल बाइट जोड़ता है;
- $in क्लॉज में जोड़ा गया प्रत्येक नंबर 11 बाइट्स जोड़ता है।
तो, मान लें कि आपके पास एक-बाइट फ़ील्डनाम है (न्यूनतम, वास्तव में), आपका अधिकतम है:
mongos> 16*1024*1024
16777216
mongos> (16*1024*1024) - 22 - 1
16777193
mongos> ((16*1024*1024) - 22 -1) / 11
1525199.3636363635
उत्तर:1,525,198 (यह 1.5 मिलियन है। यह काफी बड़ा है।)