クエリ自体はドキュメントです 。 MongoDBは、ドキュメントサイズ(バージョン2.4.0以降)を16MBに制限しています。
実際、検索で行っていることは次のとおりです。
db.collectionName.find(queryDoc)
ここで、「queryDoc」は次のようなものです:
{ 'fieldOne' : { $in : [ 1, 2, 3, 4] } }
$ inクエリに渡すことができる値の最大数を見つけるには、 bsonsizeを使用します コマンド:
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
したがって、追加の整数はすべてサイズ11バイトであることがわかります。 11ビットではなく、11バイト。これは、BSONが内部で数値をそれぞれ少なくとも64ビットとラッパーとして格納する方法によるものです。これは次のように簡単に確認できます:
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
したがって、個々の数値のサイズに関係なく、同じbsonsizeです。
質問自体について:そのクエリドキュメントの大きさはどれくらいですか?
pymongoで、mongos javascriptプロンプトを介して、$ in句を使用した1つのフィールドのクエリにこれらを合計すると、$inクエリの最大サイズに対して同じ追加ファクトが得られます。
mongos> Object.bsonsize({ 'a' : { '$in' : [1] }})
34
mongos> Object.bsonsize({ '' : { '$in' : [1] }})
33
mongos> Object.bsonsize({ '' : { '$in' : [] }})
22
- クエリドキュメント自体は22バイトです;
- フィールド名の各バイトは1バイトを追加します;
- $in句に追加される各数値は11バイトを追加します。
したがって、1バイトのフィールド名(実際には最小)があるとすると、最大は次のようになります。
mongos> 16*1024*1024
16777216
mongos> (16*1024*1024) - 22 - 1
16777193
mongos> ((16*1024*1024) - 22 -1) / 11
1525199.3636363635
回答:1,525,198 (それは150万です。それはかなり大きいです。)