sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $binarySize

Fra MongoDB 4.4 kan du bruge $binarySize aggregeringspipeline-operator for at returnere størrelsen af ​​en given streng eller binær dataværdis indhold i bytes.

Det accepterer ethvert gyldigt udtryk, så længe det løses til enten en streng eller binær dataværdi. Argumentet kan også være null , i hvilket tilfælde $binarySize returnerer null .

Eksempel

Antag, at vi har en samling kaldet posts med følgende 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 bruge $binarySize operatør for at kontrollere størrelsen af ​​forskellige felter.

Eksempel:

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

Resultat:

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

I dette tilfælde returnerer vi den binære størrelse af title feltet og body felt.

Nul-værdier

Hvis det angivne felts værdi er null , $binarySize operatør vil returnere null .

Eksempel:

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

Resultat:

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

I dette tilfælde er status feltet i vores dokument er null , og så $binarySize returnerede null .

Forkerte datatyper

Som nævnt, $binarySize accepterer ethvert gyldigt udtryk, så længe det løses til enten en streng, en binær dataværdi eller null .

Her er et eksempel på, hvad der sker, hvis du angiver et udtryk, der løses til en anden BSON-type:

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 dette tilfælde forsøgte vi at finde størrelsen på et array, men det er ikke en af ​​de understøttede BSON-typer, så vi får en fejl.

Vi kan dog stadig få størrelsen på individuelle array-elementer (så længe de er en af ​​de understøttede typer).

Eksempel:

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

Resultat:

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

I dette eksempel får vi størrelsen af ​​det første array-element (arrays er nul-baserede, så 0 henviser til det første element).

Dokumentstørrelse

MongoDB har også $bsonSize operator, som giver dig mulighed for at få størrelsen på et dokument.

En anden måde at få et dokuments størrelse på er at bruge Object.bsonSize() metode.


  1. Kunne ikke oprette forbindelse til Redis på 127.0.0.1:6379:Forbindelse nægtet med hjemmebrygget

  2. Sådan løses MongoError:pulje ødelagt under forbindelse til CosmosDB

  3. Redis serialisering og deserialisering

  4. Redis, hvordan øger man alle scores af et zset med ZINCRBY?