Hvis du skal returnere størrelsen af et dokument i MongoDB, kan du bruge følgende:
$bsonSizeaggregeringspipeline-operatørObject.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.