sql >> データベース >  >> NoSQL >> MongoDB

MongoDBの$inクエリに渡されるパラメーターの最大数はいくつですか?

    クエリ自体はドキュメントです 。 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万です。それはかなり大きいです。)



    1. 同じサーバー上のMongoDBの複数のインスタンス

    2. 新しい/別のmongoデータベースにユーザーを追加するには、どのMongoDBユーザー権限が必要ですか?

    3. MongoDBでデータベースを作成する

    4. 条件付きで2つの追加コレクションに参加する方法