sql >> Database >  >> NoSQL >> MongoDB

MongoDB Object.bsonSize()

In MongoDB kunt u de Object.bsonSize() . gebruiken methode om de grootte van een document in bytes terug te geven.

Voorbeeld

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

{
	"_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"
		}
	]
}

We kunnen zien dat de location veld bevat een document. En de reviews veld bevat een reeks documenten.

Laten we eerst de Object.bsonSize() . gebruiken methode om de grootte van het document op het hoogste niveau te retourneren.

Object.bsonsize(db.bars.findOne())

Resultaat:

502

We kunnen zien dat het hele document 502 bytes is.

Merk op dat ik findOne() . gebruik en niet find() . De reden hiervoor is dat find() geeft een cursor terug in plaats van het document zelf. De findOne() methode, aan de andere kant, retourneert het eigenlijke document en de resultaten moeten daarom nauwkeurig zijn.

Subdocumenten

Laten we Object.bsonSize() . gebruiken om de grootte van de location te controleren veld.

We kunnen puntnotatie gebruiken om de waarde van de location . te krijgen veld:

Object.bsonsize(
  db.bars.findOne().location
  )

Resultaat:

61

In dit geval is het document 61 bytes.

Voor de zekerheid, dit is wat we daadwerkelijk hebben doorgegeven aan de Object.bsonSize() methode:

db.bars.findOne().location

Resultaat:

{
	"type" : "Point",
	"coordinates" : [
		-16.919297718553366,
		145.77675259719823
	]
}

Dus dat is het document van 61 bytes.

Documenten in arrays

We kunnen ook de grootte van documenten ophalen die elementen van een array zijn.

Voorbeeld:

Object.bsonsize(
  db.bars.findOne().reviews[0]
  )

Resultaat:

91

MongoDB-arrays zijn gebaseerd op nul, dus dit document is de eerste beoordeling.

We kunnen het argument zelf uitvoeren om het hele document te zien:

db.bars.findOne().reviews[0]

Resultaat:

{
	"name" : "Steve",
	"date" : "20 December, 2020",
	"rating" : 5,
	"comments" : "Great vibe."
}

Projecties

We kunnen de Object.bsonSize() . gebruiken methode om de grootte van het document te retourneren dat wordt geretourneerd door een projectie. Om dit te doen, hoeven we alleen de projectie in onze zoekopdracht op te geven.

Voorbeeld:

Object.bsonsize(
    db.bars.findOne(
      {},
      {
        _id: 0,
        location: 1
      }
    )
)

Resultaat:

76

In dit geval krijgen we maat 76.

Het is je misschien opgevallen dat in ons eerdere voorbeeld de location veld was 61 bytes, maar nu is het 76.

Wat is er aan de hand?

Welnu, wanneer we projecties gebruiken, zoals in dit voorbeeld, retourneren we eigenlijk een buitenste document dat de location bevat veldnaam en de waarde ervan.

Dit is wat deze projectie oplevert:

db.bars.findOne(
    {},
    {
      _id: 0,
      location: 1
    }
  )

Resultaat:

{
	"location" : {
		"type" : "Point",
		"coordinates" : [
			-16.919297718553366,
			145.77675259719823
		]
	}
}

In ons eerdere voorbeeld ging onze vraag echter als volgt:

db.bars.findOne().location

En gaf dit terug:

{
	"type" : "Point",
	"coordinates" : [
		-16.919297718553366,
		145.77675259719823
	]
}

Ons projectievoorbeeld retourneerde dus een groter document, omdat het zowel de veldnaam als de waarde retourneerde. En ons eerdere voorbeeld retourneerde een kleiner document omdat het alleen de waarde retourneerde.

Aggregatiepijplijn

Wanneer u de aggregatiepijplijn gebruikt, kunt u de $bsonSize . gebruiken operator om de grootte van een document te krijgen.

U kunt ook de $binarySize . gebruiken operator om de grootte van de inhoud van een string of binaire waarde in bytes te krijgen.


  1. Bulkopname in Redis

  2. De beste manier om MongoDB te hosten op DigitalOcean

  3. Hoe laat ik een MongoDB-database van de opdrachtregel vallen?

  4. Hoe aggregeren op datum wanneer een volledige tijdstempel wordt gegeven in het aggregatiekader?