Dans MongoDB, vous pouvez utiliser le Object.bsonSize()
méthode pour renvoyer la taille d'un document en octets.
Exemple
Supposons que nous ayons une collection appelée bars
avec le document suivant :
{ "_id" : 1, "name" : "Boardwalk Social", "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }, "categories" : [ "Bar", "Restaurant", "Hotel" ], "reviews" : [ { "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }, { "name" : "Lisa", "date" : "25 October, 2020", "rating" : 3, "comments" : "They just raised their prices :(" }, { "name" : "Kim", "date" : "21 October, 2020", "rating" : 4, "comments" : "Nice for Friday happy hour" } ] }
Nous pouvons voir que le location
champ contient un document. Et les reviews
champ contient un tableau de documents.
Tout d'abord, utilisons le Object.bsonSize()
méthode pour renvoyer la taille du document de niveau supérieur.
Object.bsonsize(db.bars.findOne())
Résultat :
502
Nous pouvons voir que le document entier fait 502 octets.
Remarquez que j'utilise findOne()
et non find()
. La raison en est que find()
renvoie un curseur, plutôt que le document lui-même. Le findOne()
méthode, d'autre part, renvoie le document réel et ses résultats doivent donc être précis.
Sous-documents
Utilisons Object.bsonSize()
pour vérifier la taille de l'location
champ.
Nous pouvons utiliser la notation par points pour obtenir la valeur de location
champ :
Object.bsonsize(
db.bars.findOne().location
)
Résultat :
61
Dans ce cas, le document fait 61 octets.
Juste pour être sûr, voici ce que nous avons réellement passé à Object.bsonSize()
méthode :
db.bars.findOne().location
Résultat :
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
C'est donc le document qui fait 61 octets.
Documents dans des tableaux
Nous pouvons également récupérer la taille des documents qui sont des éléments d'un tableau.
Exemple :
Object.bsonsize(
db.bars.findOne().reviews[0]
)
Résultat :
91
Les tableaux MongoDB sont basés sur zéro, ce document est donc la première révision.
Nous pouvons exécuter l'argument par lui-même pour voir l'ensemble du document :
db.bars.findOne().reviews[0]
Résultat :
{ "name" : "Steve", "date" : "20 December, 2020", "rating" : 5, "comments" : "Great vibe." }
Projections
Nous pouvons utiliser le Object.bsonSize()
méthode pour renvoyer la taille du document renvoyé par une projection. Pour ce faire, nous devons simplement fournir la projection dans notre requête.
Exemple :
Object.bsonsize(
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
)
Résultat :
76
Dans ce cas, nous obtenons une taille de 76.
Vous avez peut-être remarqué que dans notre exemple précédent, le location
le champ était de 61 octets, mais maintenant il est de 76.
Que se passe-t-il ?
Eh bien, lorsque nous utilisons des projections, comme nous le sommes dans cet exemple, nous renvoyons en fait un document externe qui contient le location
nom du champ ainsi que sa valeur.
Voici ce que cette projection renvoie :
db.bars.findOne(
{},
{
_id: 0,
location: 1
}
)
Résultat :
{ "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } }
Cependant, dans notre exemple précédent, notre requête ressemblait à ceci :
db.bars.findOne().location
Et renvoyé ceci :
{ "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] }
Notre exemple de projection a donc renvoyé un document plus volumineux, car il a renvoyé à la fois le nom du champ et la valeur. Et notre exemple précédent renvoyait un document plus petit car il ne renvoyait que la valeur.
Pipeline d'agrégation
Lorsque vous utilisez le pipeline d'agrégation, vous pouvez utiliser le $bsonSize
opérateur pour obtenir la taille d'un document.
Vous pouvez également utiliser le $binarySize
opérateur pour obtenir la taille du contenu d'une chaîne ou d'une valeur binaire en octets.