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

MongoDB Object.bsonSize()

In MongoDB, puoi usare Object.bsonSize() metodo per restituire la dimensione di un documento in byte.

Esempio

Supponiamo di avere una collezione chiamata bars con il seguente documento:

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

Possiamo vedere che la location campo contiene un documento. E le reviews contiene un array di documenti.

Per prima cosa, utilizziamo Object.bsonSize() metodo per restituire le dimensioni del documento di primo livello.

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

Risultato:

502

Possiamo vedere che l'intero documento è di 502 byte.

Nota che sto usando findOne() e non find() . Il motivo è che find() restituisce un cursore, anziché il documento stesso. Il findOne() metodo, d'altra parte, restituisce il documento vero e proprio e i suoi risultati dovrebbero quindi essere accurati.

Documenti secondari

Usiamo Object.bsonSize() per verificare la dimensione della location campo.

Possiamo usare la notazione del punto per ottenere il valore della location campo:

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

Risultato:

61

In questo caso, il documento è di 61 byte.

Per sicurezza, ecco cosa abbiamo effettivamente passato a Object.bsonSize() metodo:

db.bars.findOne().location

Risultato:

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

Quindi questo è il documento di 61 byte.

Documenti negli array

Possiamo anche recuperare la dimensione dei documenti che sono elementi di un array.

Esempio:

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

Risultato:

91

Gli array MongoDB sono a base zero, quindi questo documento è la prima recensione.

Possiamo eseguire l'argomento da solo per vedere l'intero documento:

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

Risultato:

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

Proiezioni

Possiamo usare Object.bsonSize() metodo per restituire la dimensione del documento restituita da una proiezione. Per fare ciò, dobbiamo semplicemente fornire la proiezione nella nostra query.

Esempio:

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

Risultato:

76

In questo caso, otteniamo una dimensione di 76.

Potresti aver notato che nel nostro esempio precedente, il location il campo era 61 byte, ma ora è 76.

Cosa sta succedendo?

Bene, quando usiamo le proiezioni, come in questo esempio, stiamo effettivamente restituendo un documento esterno che contiene il location nome del campo e il suo valore.

Ecco cosa restituisce questa proiezione:

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

Risultato:

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

Tuttavia, nel nostro esempio precedente, la nostra query era così:

db.bars.findOne().location

E restituito questo:

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

Quindi il nostro esempio di proiezione ha restituito un documento più grande, poiché ha restituito sia il nome del campo che il valore. E il nostro esempio precedente ha restituito un documento più piccolo perché ha restituito solo il valore.

Pipeline di aggregazione

Quando si utilizza la pipeline di aggregazione, è possibile utilizzare $bsonSize operatore per ottenere le dimensioni di un documento.

Puoi anche usare $binarySize per ottenere la dimensione di una stringa o del contenuto di un valore binario in byte.