sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvad er det maksimale antal parametre, der sendes til $in-forespørgsel i MongoDB?

Selve forespørgslen er et dokument . MongoDB begrænser dokumentstørrelser (fra version 2.4.0+) til 16 MB.

Virkelig, hvad du laver med et fund er:

db.collectionName.find(queryDoc)

hvor 'queryDoc' er noget i stil med:

{ 'fieldOne' : { $in : [ 1, 2, 3, 4] } }

For at finde det maksimale antal værdier, du kan sende til en $in-forespørgsel, skal du bruge bsonsize kommando:

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

Så du kan se, at hvert ekstra heltal er størrelse 11 bytes. Ikke 11 bits, 11 BYTES. Dette skyldes den måde, hvorpå BSON internt gemmer numre som mindst 64 bit hver, plus indpakningen. Dette kan nemt ses med:

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

Så uanset størrelsen på et individuelt nummer, er det den samme bsonstørrelse.

Til selve spørgsmålet:Hvor stort er det forespørgselsdokument?

Tilføjelse af disse for en et felt-forespørgsel med en $in-klausul, i pymongo, gennem mongos javascript-prompt, uanset hvad, giver alle de samme tilføjelsesfakta for den maksimale størrelse af en $in-forespørgsel:

mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
  • Selve forespørgselsdokumentet er på 22 bytes;
  • Hver byte i feltnavnet tilføjer en enkelt byte;
  • Hvert tal tilføjet til $in-sætningen tilføjer 11 bytes.

Så hvis du antager, at du har et feltnavn på én byte (minimum, virkelig), er dit maksimum:

mongos> 16*1024*1024
16777216
mongos> (16*1024*1024) - 22 - 1 
16777193
mongos> ((16*1024*1024) - 22 -1) / 11
1525199.3636363635

SVARET:1.525.198 (Det er 1,5 millioner. Det er ret stort.)



  1. Hvordan får man, opdaterer alle nøgler og dens værdier fra redis database i c#?

  2. Spring Data Redis Expire Key

  3. At vide, hvornår resque-medarbejderen havde afsluttet jobbet

  4. MongoDB $kond