MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB Object.bsonSize()

В MongoDB можете да използвате Object.bsonSize() метод за връщане на размера на документ в байтове.

Пример

Да предположим, че имаме колекция, наречена bars със следния документ:

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

Можем да видим, че location полето съдържа документ. И reviews поле съдържа масив от документи.

Първо, нека използваме Object.bsonSize() метод за връщане на размера на документа от най-високо ниво.

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

Резултат:

502

Виждаме, че целият документ е 502 байта.

Забележете, че използвам findOne() а не find() . Причината за това е, че find() връща курсор, а не самия документ. findOne() Методът, от друга страна, връща действителния документ и следователно резултатите му трябва да са точни.

Поддокументи

Нека използваме Object.bsonSize() за да проверите размера на location поле.

Можем да използваме нотация с точки, за да получим стойността на location поле:

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

Резултат:

61

В този случай документът е 61 байта.

Само за да сме сигурни, ето какво всъщност предадохме на Object.bsonSize() метод:

db.bars.findOne().location

Резултат:

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

Това е документът, който е 61 байта.

Документи в масиви

Можем също да извлечем размера на документи, които са елементи на масив.

Пример:

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

Резултат:

91

Масивите на MongoDB са базирани на нула, така че този документ е първият преглед.

Можем да изпълним аргумента самостоятелно, за да видим целия документ:

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

Резултат:

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

Прожекции

Можем да използваме Object.bsonSize() метод за връщане на размера на документа, върнат от проекция. За да направим това, просто трябва да предоставим проекцията в нашата заявка.

Пример:

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

Резултат:

76

В този случай получаваме размер 76.

Може би сте забелязали, че в нашия по-ранен пример, location полето беше 61 байта, но сега е 76.

Какво става?

Е, когато използваме проекции, както сме в този пример, ние всъщност връщаме външен документ, който съдържа location име на полето, както и неговата стойност.

Ето какво връща тази проекция:

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

Резултат:

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

Въпреки това, в предишния ни пример, нашата заявка беше така:

db.bars.findOne().location

И върна това:

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

Така че нашият пример за проекция върна по-голям документ, поради факта, че върна както името на полето, така и стойността. И нашият по-ранен пример върна по-малък документ поради факта, че върна само стойността.

Тръбопровод за агрегиране

Когато използвате конвейера за агрегиране, можете да използвате $bsonSize оператор, за да получите размера на документ.

Можете също да използвате $binarySize оператор за получаване на размера на съдържанието на низ или двоична стойност в байтове.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Грешно изчисление на разстоянието с MongoDB

  2. MongoDB $pull масив 2 ниво

  3. Автоматично генерирано поле за MongoDB с помощта на Spring Boot

  4. Запитване на данни от MongoDB с помощта на GraphQL в Django:Get-Go (1)

  5. Ограничаване на размера на съхранение в MongoDB?