1. ホーム
  2. javascript

[解決済み] Mongodb で一つのドキュメントのサイズを取得するには?

2022-11-08 12:37:15

質問

mongoの不思議な挙動に遭遇しましたので、少し解明したいと思います。

私の要求は単純です。私はコレクション内の単一のドキュメントのサイズを取得したいです。 私は2つの可能な解決策を見つけました。

  • Object.bsonsize - バイト単位でサイズを返す javascript のメソッドです。
  • db.collection.stats() - 'avgObjSize'という行があり、データ上でいくつかの "集約"(平均)サイズビューを生成します。これは、単に単一のドキュメントの平均サイズを表します。


  • 私は1つの文書だけでテストコレクションを作成するとき、両方の関数は異なる値を返します。どのように可能なのでしょうか?

    mongoドキュメントのサイズを取得するための他の方法が存在しますか?

ここでは、私がテストを行ったいくつかのコードを提供します。

  1. 新しいデータベース「test」を作成し、type:"auto"の1つの属性のみを持つ単純なドキュメントを入力しました。

    db.test.insert({type:"auto"})
    
    
  2. stats()関数呼び出しからの出力。 db.test.stats() :

    { 
      "ns" : "test.test",
      "count" : 1,
      "size" : 40,
      "avgObjSize" : 40,
      "storageSize" : 4096,
      "numExtents" : 1,
      "nindexes" : 1,
      "lastExtentSize" : 4096,
      "paddingFactor" : 1,
      "systemFlags" : 1,
      "userFlags" : 0,
      "totalIndexSize" : 8176,
      "indexSizes" : {
            "_id_" : 8176
    },
    "ok" : 1
    
    

    }

  3. bsonsize関数呼び出しからの出力。 Object.bsonsize(db.test.find({test:"auto"}))

    481
    
    

どのように解決するのですか?

前の呼び出しで Object.bsonsize() を呼び出すと、 Mongodb はドキュメントではなくカーソルのサイズを返しました。

正しい方法は、このコマンドを使うことです。

Object.bsonsize(db.test.findOne())

とは findOne() で、特定のドキュメントに対するクエリを定義することができます。

Object.bsonsize(db.test.findOne({type:"auto"}))

これは、特定のドキュメントの正しいサイズ(バイト)を返します。