La query stessa è un documento . MongoDB limita le dimensioni dei documenti (a partire dalla versione 2.4.0+) a 16 MB.
In realtà, quello che stai facendo con una ricerca è:
db.collectionName.find(queryDoc)
dove 'queryDoc' è qualcosa del tipo:
{ 'fieldOne' : { $in : [ 1, 2, 3, 4] } }
Per trovare il numero massimo di valori che puoi passare a una query $in, utilizza bsonsize comando:
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
Quindi, puoi vedere che ogni numero intero aggiuntivo ha una dimensione di 11 byte. Non 11 bit, 11 BYTE. Ciò è dovuto al modo in cui BSON memorizza internamente i numeri come almeno 64 bit ciascuno, più il wrapper. Questo può essere facilmente visto con:
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
Quindi, non importa quale sia la dimensione di un singolo numero, è la stessa bsonsize.
Passiamo alla domanda stessa:quanto è grande quel documento di query?
Sommandoli per una query su un campo con una clausola $in, in pymongo, tramite il prompt di javascript mongos, qualunque cosa, si ottengono tutti gli stessi fatti di addizione per la dimensione massima di una query $in:
mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
- Il documento della query stesso è di 22 byte;
- Ogni byte del nome del campo aggiunge un singolo byte;
- Ogni numero aggiunto alla clausola $in aggiunge 11 byte.
Quindi, supponendo che tu abbia un nome di campo di un byte (il minimo, in realtà), il tuo massimo è:
mongos> 16*1024*1024
16777216
mongos> (16*1024*1024) - 22 - 1
16777193
mongos> ((16*1024*1024) - 22 -1) / 11
1525199.3636363635
LA RISPOSTA:1.525.198 (Sono 1,5 milioni. È abbastanza grande.)