Samo zapytanie jest dokumentem . MongoDB ogranicza rozmiary dokumentów (od wersji 2.4.0+) do 16 MB.
Naprawdę, to, co robisz ze znaleziskiem, to:
db.collectionName.find(queryDoc)
gdzie 'queryDoc' to coś takiego:
{ 'fieldOne' : { $in : [ 1, 2, 3, 4] } }
Aby znaleźć maksymalną liczbę wartości, które można przekazać do zapytania $in, użyj bsonsize polecenie:
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
Możesz więc zobaczyć, że każda dodatkowa liczba całkowita ma rozmiar 11 bajtów. Nie 11 bitów, 11 bajtów. Wynika to ze sposobu, w jaki BSON wewnętrznie przechowuje liczby jako co najmniej 64 bity każda, plus opakowanie. Można to łatwo zauważyć za 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 więc, bez względu na wielkość pojedynczego numeru, jest to ten sam bsonsize.
Do samego pytania:jak duży jest dokument zapytania?
Dodanie ich do zapytania jednopolowego z klauzulą $in, w pymongo, poprzez monit javascript mongos, cokolwiek, daje te same fakty dodawania dla maksymalnego rozmiaru zapytania $in:
mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
- Sam dokument zapytania ma 22 bajty;
- Każdy bajt nazwy pola dodaje jeden bajt;
- Każda liczba dodana do klauzuli $in dodaje 11 bajtów.
Tak więc, zakładając, że masz jednobajtową nazwę pola (w rzeczywistości minimum), twoje maksimum to:
mongos> 16*1024*1024
16777216
mongos> (16*1024*1024) - 22 - 1
16777193
mongos> ((16*1024*1024) - 22 -1) / 11
1525199.3636363635
ODPOWIEDŹ:1 525 198 (To 1,5 miliona. To całkiem sporo.)