MongoDBでは、Object.bsonSize()
を使用できます ドキュメントのサイズをバイト単位で返すメソッド。
例
bars
というコレクションがあるとします。 次のドキュメントで:
{ "_id" : 1, "name" : "Boardwalk Social", "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }, "categories" : [ "Bar", "Restaurant", "Hotel" ], "reviews" : [ { "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }, { "name" : "Lisa", "date" : "25 October, 2020", "rating" : 3, "comments" : "They just raised their prices :(" }, { "name" : "Kim", "date" : "21 October, 2020", "rating" : 4, "comments" : "Nice for Friday happy hour" } ] }
location
フィールドにはドキュメントが含まれます。そしてreviews
フィールドにはドキュメントの配列が含まれています。
まず、Object.bsonSize()
を使用しましょう トップレベルのドキュメントのサイズを返すメソッド。
Object.bsonsize(db.bars.findOne())
結果:
502
ドキュメント全体が502バイトであることがわかります。
findOne()
を使用していることに注意してください find()
ではありません 。この理由は、find()
ドキュメント自体ではなく、カーソルを返します。 findOne()
一方、メソッドは実際のドキュメントを返すため、その結果は正確である必要があります。
サブドキュメント
Object.bsonSize()
を使用しましょう location
のサイズを確認するには フィールド。
ドット表記を使用して、location
の値を取得できます フィールド:
Object.bsonsize(
db.bars.findOne().location
)
結果:
61
この場合、ドキュメントは61バイトです。
念のため、実際にObject.bsonSize()
に渡したものを次に示します。 方法:
db.bars.findOne().location
結果:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
これが61バイトのドキュメントです。
配列内のドキュメント
配列の要素であるドキュメントのサイズを取得することもできます。
例:
Object.bsonsize(
db.bars.findOne().reviews[0]
)
結果:
91
MongoDBアレイはゼロベースであるため、このドキュメントは最初のレビューです。
引数を単独で実行して、ドキュメント全体を表示できます。
db.bars.findOne().reviews[0]
結果:
{ "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }
プロジェクション
Object.bsonSize()
を使用できます 投影によって返されるドキュメントのサイズを返すメソッド。これを行うには、クエリで予測を提供する必要があります。
例:
Object.bsonsize(
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
)
結果:
76
この場合、サイズは76になります。
前の例では、location
に気付いたかもしれませんが、 フィールドは61バイトでしたが、現在は76バイトです。
何が起こっているのですか?
この例のようにプロジェクションを使用すると、実際にはlocation
を含む外部ドキュメントが返されます。 フィールド名とその値。
この予測が返すものは次のとおりです。
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
結果:
{ "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } }
ただし、前の例では、クエリは次のようになりました。
db.bars.findOne().location
そしてこれを返しました:
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
したがって、投影例では、フィールド名と値の両方が返されるため、より大きなドキュメントが返されました。また、前の例では、値のみが返されるため、小さいドキュメントが返されました。
集約パイプライン
集計パイプラインを使用する場合は、$bsonSize
を使用できます ドキュメントのサイズを取得する演算子。
$binarySize
を使用することもできます 文字列またはバイナリ値のコンテンツのサイズをバイト単位で取得する演算子。