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.