sql >> Database teknologi >  >> NoSQL >> MongoDB

2 måder at få et dokuments størrelse i MongoDB

Hvis du skal returnere størrelsen af ​​et dokument i MongoDB, kan du bruge følgende:

  • $bsonSize aggregeringspipeline-operatør
  • Object.bsonSize() metode

Nedenfor er eksempler på hver tilgang.

Eksempel på data

Til de følgende eksempler bruger vi en samling kaldet products med følgende dokumenter:

{ "_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" } }

Bemærk, at hvert produktfelt indeholder et indlejret dokument.

Vi kan returnere størrelsen af ​​hele dokumentet, eller kun det indlejrede objekt.

$bsonSize Aggregation Pipeline Operator

Vi kan bruge $bsonSize operator med $$ROOT systemvariabel for at få størrelsen på hele dokumentet. $$ROOT variabel refererer til det dokument, der i øjeblikket behandles af pipelinen.

Eksempel:

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

Resultat:

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

I dette tilfælde får vi størrelsen på alle dokumenter i samlingen, men du kan altid filtrere det til kun ét dokument eller nogle.

For at få størrelsen på de indlejrede dokumenter kan vi erstatte $$ROOT variabel med feltnavnet på dokumenterne.

Eksempel:

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

Resultat:

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

I dette tilfælde er feltnavnet product og derfor bruger vi $product at henvise til det felt.

Se MongoDB $bsonSize for mere information og eksempler.

Object.bsonSize() Metode

Object.bsonSize() metode er en anden måde at få størrelsen på et dokument på.

Eksempel:

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

Resultat:

81

Denne metode returnerer kun størrelsen og ikke mere.

Bemærk, at jeg brugte findOne() metoden i stedet for find() metode. Jeg gjorde dette fordi find() returnerer kun en markør, hvorimod findOne() returnerer det faktiske dokument.

Vi kan få størrelsen på det indlejrede dokument ved at tilføje det ved hjælp af punktnotation:

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

Resultat:

54

Vi kan få størrelsen på det næste dokument ved at angive dets _id som forespørgselsargument:

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

Resultat:

36

Se MongoDB Object.bsonSize() for mere information og eksempler.


  1. Kører MongoDB på DigitalOcean

  2. Hvordan sammenkæder man arrays fra flere dokumenter i MongoDB?

  3. Hvordan opdaterer/upsætter jeg et dokument i Mongoose?

  4. MongoDB Database Automation Basics Brug af Chef