sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB Object.bsonSize()

V MongoDB můžete použít Object.bsonSize() metoda pro vrácení velikosti dokumentu v bajtech.

Příklad

Předpokládejme, že máme kolekci nazvanou bars s následujícím dokumentem:

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

Vidíme, že location pole obsahuje dokument. A reviews pole obsahuje pole dokumentů.

Nejprve použijeme Object.bsonSize() metoda pro vrácení velikosti dokumentu nejvyšší úrovně.

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

Výsledek:

502

Vidíme, že celý dokument má 502 bajtů.

Všimněte si, že používám findOne() a ne find() . Důvodem je to, že find() vrátí kurzor, nikoli samotný dokument. findOne() metoda na druhé straně vrací skutečný dokument a jeho výsledky by proto měly být přesné.

Vnořené dokumenty

Použijme Object.bsonSize() zkontrolovat velikost location pole.

K získání hodnoty location můžeme použít tečkovou notaci pole:

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

Výsledek:

61

V tomto případě má dokument 61 bajtů.

Pro jistotu zde je to, co jsme skutečně předali Object.bsonSize() metoda:

db.bars.findOne().location

Výsledek:

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

Takže to je dokument, který má 61 bajtů.

Dokumenty v polích

Můžeme také získat velikost dokumentů, které jsou prvky pole.

Příklad:

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

Výsledek:

91

Pole MongoDB jsou založeny na nule, takže tento dokument je první recenzí.

Můžeme spustit argument samotný, abychom viděli celý dokument:

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

Výsledek:

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

Projekce

Můžeme použít Object.bsonSize() metoda pro vrácení velikosti dokumentu vráceného projekcí. Abychom to mohli udělat, musíme v našem dotazu poskytnout projekci.

Příklad:

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

Výsledek:

76

V tomto případě dostaneme velikost 76.

Možná jste si všimli, že v našem dřívějším příkladu location pole bylo 61 bajtů, ale nyní je to 76.

Co se děje?

Když použijeme projekce, jako jsme v tomto příkladu, ve skutečnosti vracíme vnější dokument, který obsahuje location název pole a také jeho hodnotu.

Zde je to, co tato projekce vrací:

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

Výsledek:

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

V našem dřívějším příkladu však náš dotaz vypadal takto:

db.bars.findOne().location

A vrátil toto:

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

Náš příklad projekce tedy vrátil větší dokument, protože vrátil název pole i hodnotu. A náš dřívější příklad vrátil menší dokument, protože vrátil pouze hodnotu.

Agregační kanál

Při použití agregačního kanálu můžete použít $bsonSize operátor k získání velikosti dokumentu.

Můžete také použít $binarySize operátor k získání velikosti obsahu řetězce nebo binární hodnoty v bajtech.


  1. Mezipaměť v paměti s vypršením platnosti LRU

  2. Proč existují pole KEYS a ARGV při volání skriptů Redis Lua?

  3. Porovnejte s podřetězcem v agregaci mongodb

  4. Umístění databáze mongodb na mac