Самата заявка е документ . MongoDB ограничава размерите на документа (от версия 2.4.0+) до 16 MB.
Наистина, това, което правите с находка, е:
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 БАЙТА. Това се дължи на начина, по който BSON вътрешно съхранява числа като най-малко 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, чрез подканата на javascript на mongos, каквото и да е, всичко това дава едни и същи факти за добавяне за максималния размер на заявка $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 милиона. Това е доста голямо.)