Ако трябва да върнете размера на документ в MongoDB, можете да използвате следното:
$bsonSize
оператор на тръбопровод за агрегация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
оператор с $$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()
метод вместо find()
метод. Направих това, защото find()
връща само курсор, докато findOne()
връща действителния документ.
Можем да получим размера на вградения документ, като го добавим с помощта на нотация с точки:
Object.bsonsize(
db.products.findOne().product
)
Резултат:
54
Можем да получим размера на следващия документ, като посочим неговия _id
като аргумент на заявката:
Object.bsonsize(
db.products.findOne({_id:2}).product
)
Резултат:
36
Вижте MongoDB Object.bsonSize()
за повече информация и примери.