sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $binarySize

Från MongoDB 4.4 kan du använda $binarySize aggregeringspipeline-operator för att returnera storleken på en given sträng eller binärt datavärdes innehåll i byte.

Den accepterar vilket giltigt uttryck som helst så länge det löser sig till antingen en sträng eller ett binärt datavärde. Argumentet kan också vara null , i så fall $binarySize returnerar null .

Exempel

Anta att vi har en samling som heter posts med följande dokument:

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

Vi kan använda $binarySize operatör för att kontrollera storleken på olika fält.

Exempel:

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

Resultat:

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

I det här fallet returnerar vi den binära storleken för title fältet och body fältet.

Nullvärden

Om det angivna fältets värde är null , $binarySize operatören returnerar null .

Exempel:

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

Resultat:

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

I det här fallet, status fältet i vårt dokument är null , och så $binarySize returnerade null .

Fel datatyper

Som nämnts, $binarySize accepterar alla giltiga uttryck så länge det löser sig till antingen en sträng, ett binärt datavärde eller null .

Här är ett exempel på vad som händer om du tillhandahåller ett uttryck som löser sig till en annan BSON-typ:

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

Resultat:

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

I det här fallet försökte vi hitta storleken på en array, men det är inte en av de BSON-typer som stöds, så vi får ett felmeddelande.

Vi kan dock fortfarande få storleken på enskilda matriselement (så länge de är en av de stödda typerna).

Exempel:

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

Resultat:

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

I det här exemplet får vi storleken på det första matriselementet (matriser är nollbaserade, så 0 hänvisar till det första elementet).

Dokumentstorlek

MongoDB har också $bsonSize operator, som gör att du kan få storleken på ett dokument.

Ett annat sätt att få ett dokuments storlek är att använda Object.bsonSize() metod.


  1. Redis klient

  2. Autentiseringsfel vid försök att spara till mongodb

  3. Hur summerar man alla fält i ett underdokument till MongoDB?

  4. Hur tar man bort ett "dokument" med "ID" med den officiella C#-drivrutinen för MongoDB?