sql >> Database >  >> NoSQL >> MongoDB

Wat is het maximale aantal parameters dat wordt doorgegeven aan $in query in MongoDB?

De query zelf is een document . MongoDB beperkt documentgroottes (vanaf versie 2.4.0+) tot 16 MB.

Echt, wat je doet met een vondst is:

db.collectionName.find(queryDoc)

waarbij 'queryDoc' zoiets is als:

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

Om het maximale aantal waarden te vinden dat u aan een $in-query kunt doorgeven, gebruikt u de bsonsize commando:

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

U kunt dus zien dat elk extra geheel getal 11 bytes groot is. Geen 11 bits, 11 BYTES. Dit komt door de manier waarop BSON nummers intern opslaat als ten minste 64 bits per stuk, plus de wrapper. Dit is gemakkelijk te zien met:

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

Dus ongeacht de grootte van een individueel nummer, het is dezelfde grootte.

Op naar de vraag zelf:hoe groot is dat querydocument?

Deze optellen voor een eenveldquery met een $in-clausule, in pymongo, via de mongos javascript-prompt, wat dan ook, levert allemaal dezelfde toevoegingsfeiten op voor de maximale grootte van een $in-query:

mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
  • Het querydocument zelf is 22 bytes;
  • Elke byte van de veldnaam voegt een enkele byte toe;
  • Elk getal dat aan de $in-clausule wordt toegevoegd, voegt 11 bytes toe.

Dus, aangenomen dat je een veldnaam van één byte hebt (het minimum, echt), is je maximum:

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

HET ANTWOORD:1.525.198 (Dat is 1,5 miljoen. Dat is behoorlijk veel.)



  1. mongo-groepsvraag hoe velden te behouden

  2. Node.js + mangoest bevriest knooppunt bij meer dan 100 resultaten

  3. Hoe haal ik de sleutel uit de waarde in het sleutel / waarde-paar in de redis-winkelclient?

  4. MongoDB - Het argument voor $size moet een Array zijn, maar was van het type:EOO / missing