sql >> Database >  >> NoSQL >> MongoDB

MongoDB $binarySize

Vanaf MongoDB 4.4 kunt u de $binarySize . gebruiken aggregatiepijplijnoperator om de grootte van een bepaalde tekenreeks of binaire gegevenswaarde in bytes te retourneren.

Het accepteert elke geldige expressie zolang deze wordt omgezet in een tekenreeks of binaire gegevenswaarde. Het argument kan ook null . zijn , in welk geval $binarySize retourneert null .

Voorbeeld

Stel dat we een verzameling hebben met de naam posts met het volgende document:

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

We kunnen de $binarySize . gebruiken operator om de grootte van verschillende velden te controleren.

Voorbeeld:

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

Resultaat:

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

In dit geval retourneren we de binaire grootte van de title veld en de body veld.

Null-waarden

Als de waarde van het gespecificeerde veld null is , de $binarySize operator retourneert null .

Voorbeeld:

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

Resultaat:

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

In dit geval is de status veld in ons document is null , en dus $binarySize null geretourneerd .

Verkeerde gegevenstypen

Zoals vermeld, $binarySize accepteert elke geldige uitdrukking zolang deze wordt omgezet in een tekenreeks, een binaire gegevenswaarde of null .

Hier is een voorbeeld van wat er gebeurt als u een uitdrukking opgeeft die wordt omgezet in een ander BSON-type:

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

Resultaat:

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

In dit geval hebben we geprobeerd de grootte van een array te vinden, maar dat is niet een van de ondersteunde BSON-typen, dus we krijgen een foutmelding.

We kunnen echter nog steeds de grootte van afzonderlijke array-elementen krijgen (zolang ze een van de ondersteunde typen zijn).

Voorbeeld:

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

Resultaat:

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

In dit voorbeeld krijgen we de grootte van het eerste array-element (arrays zijn gebaseerd op nul, dus 0 verwijst naar het eerste element).

Documentformaat

MongoDB heeft ook de $bsonSize operator, waarmee u de grootte van een document kunt krijgen.

Een andere manier om de grootte van een document te krijgen, is door de Object.bsonSize() te gebruiken methode.


  1. Maak een back-up van een MongoDB-database met mongodump

  2. MongoDB:krijgt geen correct resultaat met de $ geoWithin-operator

  3. Waarom voegt mijn schema geen standaardwaarden toe aan mangoestarrays?

  4. Hoe GROUP BY te doen in Redis