在MongoDB中获取文档大小的2种方法
如果需要在MongoDB中返回文档的大小,可以使用以下内容:
- 聚合管道运算符
[$bsonSize](https://database.guide/mongodb-bsonsize/ "MongoDB $bsonSize") - 方法
[Object.bsonSize()](https://database.guide/mongodb-object-bsonsize/ "MongoDB Object.bsonSize()")
以下是每种方法的示例。
示例数据
对于以下示例,我们将使用与以下文档一起调用的集合:products
{ “_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” } }
请注意,每个产品字段都包含一个嵌入的文档。
我们可以返回整个文档的大小,也可以只返回嵌入对象的大小。
聚合管道运算符$bsonSize
我们可以将运算符与系统变量一起使用来获取整个文档的大小。变量引用管道当前正在处理的文档。[$bsonSize](https://database.guide/mongodb-bsonsize/ "MongoDB $bsonSize")``$$ROOT``$$ROOT
例:
db.products.aggregate([
{
$project: {
"rootSize": { $sum: { $bsonSize: "$$ROOT" } }
}
}
])
结果:
{ “_id” : 1, “rootSize” : 81 } { “_id” : 2, “rootSize” : 63 } { “_id” : 3, “rootSize” : 76 }
在这种情况下,我们获取集合中所有文档的大小,但您始终可以将其筛选为一个文档或多个文档。
要获取嵌入文档的大小,我们可以将变量替换为文档的字段名称。$$ROOT
例:
db.products.aggregate([
{
$project: {
"documentSize": { $sum: { $bsonSize: "$product" } }
}
}
])
结果:
{ “_id” : 1, “documentSize” : 54 } { “_id” : 2, “documentSize” : 36 } { “_id” : 3, “documentSize” : 49 }
在本例中,字段名称为 并且我们用来引用该字段。product``$product
请参阅 MongoDB $bsonSize 了解更多信息和示例。
方法Object.bsonSize()
Object.bsonSize() 方法是获取文档大小的另一种方法。
例:
Object.bsonsize(
db.products.findOne()
)
结果:
81
此方法仅返回大小,不再返回。
请注意,我使用了方法而不是方法。我这样做是因为只返回一个光标,而返回实际文档。[findOne()](https://database.guide/mongodb-findone/ "MongoDB findOne()")``[find()](https://database.guide/mongodb-find/ "MongoDB find()")``find()``findOne()
我们可以通过使用点符号附加嵌入文档来获取嵌入文档的大小:
Object.bsonsize(
db.products.findOne().product
)
结果:
54
我们可以通过将其指定为查询参数来获取下一个文档的大小:_id
Object.bsonsize(
db.products.findOne({_id:2}).product
)
结果:
36
请参阅 MongoDB 了解更多信息和示例。[Object.bsonSize()](https://database.guide/mongodb-object-bsonsize/ "MongoDB Object.bsonSize()")