Itself is a document . MongoDB limits document sizes (starting with version 2.4.0+) to 16 MB.
Indeed, what do you do with the search:
db.collectionName.find(queryDoc)
where the 'queryDoc' looks something like this:
{ 'fieldOne' : { $in : [ 1, 2, 3, 4] } }
To find the maximum number of values that you can pass in a $ request, use the bsonsize command:
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
So you can see that each additional integer is 11 bytes. Not 11 bits, 11 bytes. This is because BSON internally stores numbers of at least 64 bits, plus a shell. This can be easily seen with
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
Thus, regardless of the size of the individual number, it is the same bsonsize.
To the question: how large is this query document?
Add them for a single request field with the $ in clause in pymongo, via the javascript mongos hint, regardless of whether you all do the same extra facts for the maximum size of the $ request:
mongos> Object.bsonsize({ 'a' : { '$in' : [1] }}) 34 mongos> Object.bsonsize({ '' : { '$in' : [1] }}) 33 mongos> Object.bsonsize({ '' : { '$in' : [] }}) 22
- The request document itself is 22 bytes;
- Each byte of the field name adds one byte;
- Each number added to the $ in clause adds 11 bytes.
So, suppose you have a single-byte field name (minimum, really), your maximum:
mongos> 16*1024*1024 16777216 mongos> (16*1024*1024) - 22 - 1 16777193 mongos> ((16*1024*1024) - 22 -1) / 11 1525199.3636363635
ANSWER: 1,525,198 (That's 1,5 million. It's pretty big.)