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