MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Какъв е максималният брой параметри, предавани на $in заявка в MongoDB?

Самата заявка е документ . 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 милиона. Това е доста голямо.)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. картографирането в create index в elasticsearch през mongodb river не влиза в сила

  2. Автоматизиране и управление на MongoDB в облака

  3. Проверете дали MongoDB upsert направи вмъкване или актуализация

  4. MongoDB - $set за актуализиране или натискане на елемент Array

  5. Получаване на най-високата стойност на колона в MongoDB