Samotný dotaz je dokument . MongoDB omezuje velikost dokumentů (od verze 2.4.0+) na 16 MB.
Ve skutečnosti to, co děláte s nálezem, je:
db.collectionName.find(queryDoc)
kde 'queryDoc' je něco jako:
{ 'fieldOne' : { $in : [ 1, 2, 3, 4] } }
Chcete-li zjistit maximální počet hodnot, které můžete předat dotazu $in, použijte bsonsize příkaz:
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
Můžete tedy vidět, že každé další celé číslo má velikost 11 bajtů. Ne 11 bitů, 11 BYTES. To je způsobeno způsobem, že BSON interně ukládá čísla jako každé alespoň 64 bitů plus obal. To lze snadno zjistit pomocí:
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
Takže bez ohledu na to, jaká je velikost jednotlivého čísla, je to stejná bsonsize.
Přejděte k samotné otázce:Jak velký je tento dokument dotazu?
Pokud je sečtete pro jednopolní dotaz s klauzulí $in, v pymongo, prostřednictvím příkazového řádku javascriptu mongos, ať už je to cokoliv, získáte stejné sčítací skutečnosti pro maximální velikost dotazu $in:
mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
- Samotný dokument dotazu má 22 bajtů;
- Každý bajt názvu pole přidává jeden bajt;
- Každé číslo přidané do klauzule $in přidá 11 bajtů.
Takže za předpokladu, že máte jednobajtový název pole (skutečně minimum), vaše maximum je:
mongos> 16*1024*1024
16777216
mongos> (16*1024*1024) - 22 - 1
16777193
mongos> ((16*1024*1024) - 22 -1) / 11
1525199.3636363635
ODPOVĚĎ:1 525 198 (To je 1,5 milionu. To je dost velké.)