sql >> Databasteknik >  >> NoSQL >> MongoDB

2 sätt att få ett dokuments storlek i MongoDB

Om du behöver returnera storleken på ett dokument i MongoDB kan du använda följande:

  • $bsonSize aggregeringspipeline-operatör
  • Object.bsonSize() metod

Nedan finns exempel på varje tillvägagångssätt.

Exempeldata

För följande exempel använder vi en samling som heter products med följande dokument:

{ "_id" : 1, "product" : { "name" : "Shirt - Short Sleeves", "color" : "White" } }
{ "_id" : 2, "product" : { "name" : "Cap", "color" : "Green" } }
{ "_id" : 3, "product" : { "name" : "Travel Pack", "color" : "Light Blue" } }

Observera att varje produktfält innehåller ett inbäddat dokument.

Vi kan returnera storleken på hela dokumentet, eller bara det inbäddade objektet.

$bsonSize Aggregation Pipeline Operator

Vi kan använda $bsonSize operatorn med $$ROOT systemvariabel för att få storleken på hela dokumentet. $$ROOT variabel hänvisar till dokumentet som för närvarande bearbetas av pipelinen.

Exempel:

db.products.aggregate([
  {
    $project: {
      "rootSize": { $sum: { $bsonSize: "$$ROOT" } }
    }
  }
])

Resultat:

{ "_id" : 1, "rootSize" : 81 }
{ "_id" : 2, "rootSize" : 63 }
{ "_id" : 3, "rootSize" : 76 }

I det här fallet får vi storleken på alla dokument i samlingen, men du kan alltid filtrera det till bara ett eller några dokument.

För att få storleken på de inbäddade dokumenten kan vi ersätta $$ROOT variabel med fältnamnet på dokumenten.

Exempel:

db.products.aggregate([
  {
    $project: {
      "documentSize": { $sum: { $bsonSize: "$product" } }
    }
  }
])

Resultat:

{ "_id" : 1, "documentSize" : 54 }
{ "_id" : 2, "documentSize" : 36 }
{ "_id" : 3, "documentSize" : 49 }

I det här fallet är fältnamnet product och därför använder vi $product för att hänvisa till det fältet.

Se MongoDB $bsonSize för mer information och exempel.

Object.bsonSize() Metod

Object.bsonSize() metod är ett annat sätt att få storleken på ett dokument.

Exempel:

Object.bsonsize(
    db.products.findOne()
)

Resultat:

81

Denna metod returnerar bara storleken och inte mer.

Observera att jag använde findOne() metoden istället för find() metod. Jag gjorde detta för att find() returnerar bara en markör, medan findOne() returnerar det faktiska dokumentet.

Vi kan få storleken på det inbäddade dokumentet genom att lägga till det med hjälp av punktnotation:

Object.bsonsize(
    db.products.findOne().product
)

Resultat:

54

Vi kan få storleken på nästa dokument genom att ange dess _id som frågeargument:

Object.bsonsize(
    db.products.findOne({_id:2}).product
)

Resultat:

36

Se MongoDB Object.bsonSize() för mer information och exempel.


  1. MongoDB kapslad arrayfråga

  2. MongoDB:Hur definierar man ett schema?

  3. Hur ska jag använda Booksleeve med protobuf-net?

  4. MongoDB Säkerhetskopiera och återställa med MongoDump