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

MongoDB $binarySize

Depuis MongoDB 4.4, vous pouvez utiliser le $binarySize opérateur de pipeline d'agrégation pour renvoyer la taille d'une chaîne donnée ou le contenu d'une valeur de données binaire en octets.

Il accepte toute expression valide tant qu'elle se résout en une chaîne ou en une valeur de données binaire. L'argument peut aussi être null , auquel cas, $binarySize renvoie null .

Exemple

Supposons que nous ayons une collection appelée posts avec le document suivant :

{
	"_id" : 1,
	"title" : "Hello World!",
	"body" : "This is a test post for the purposes of testing",
	"tags" : [
		"html",
		"css",
		"sql",
		"xml"
	],
	"status" : null
}

Nous pouvons utiliser le $binarySize opérateur pour vérifier la taille des différents champs.

Exemple :

db.posts.aggregate([
  {
    $project: {
      "titleSize": { $binarySize: "$title" },
      "bodySize": { $binarySize: "$body" }
    }
  }
])

Résultat :

{ "_id" : 1, "titleSize" : 12, "bodySize" : 47 }

Dans ce cas, nous renvoyons la taille binaire du title champ et le body champ.

Valeurs nulles

Si la valeur du champ spécifié est null , le $binarySize l'opérateur renverra null .

Exemple :

db.posts.aggregate([
  {
    $project: {
      "statusSize": { $binarySize: "$status" }
    }
  }
])

Résultat :

{ "_id" : 1, "statusSize" : null }

Dans ce cas, le status champ dans notre document est null , et donc $binarySize a renvoyé null .

Types de données incorrects

Comme mentionné, $binarySize accepte toute expression valide tant qu'elle se résout en une chaîne, une valeur de données binaire ou null .

Voici un exemple de ce qui se passe si vous fournissez une expression qui se résout en un type BSON différent :

db.posts.aggregate([
  {
    $project: {
      "tagsSize": { $binarySize: "$tags" }
    }
  }
])

Résultat :

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$binarySize requires a string or BinData argument, found: array",
	"code" : 51276,
	"codeName" : "Location51276"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Dans ce cas, nous avons essayé de trouver la taille d'un tableau, mais ce n'est pas l'un des types de BSON pris en charge, nous obtenons donc une erreur.

Cependant, nous pouvons toujours obtenir la taille des éléments de tableau individuels (tant qu'ils sont l'un des types pris en charge).

Exemple :

db.posts.aggregate([
  {
    $project: {
      "tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
    }
  }
])

Résultat :

{ "_id" : 1, "tagsSize" : 4 }

Dans cet exemple, nous obtenons la taille du premier élément du tableau (les tableaux sont basés sur zéro, donc 0 fait référence au premier élément).

Taille du document

MongoDB a également le $bsonSize opérateur, qui permet d'obtenir la taille d'un document.

Une autre façon d'obtenir la taille d'un document est d'utiliser le Object.bsonSize() méthode.