MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB Object.bsonSize()

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.