sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB Object.bsonSize()

I MongoDB kan du använda Object.bsonSize() metod för att returnera storleken på ett dokument i byte.

Exempel

Anta att vi har en samling som heter bars med följande dokument:

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

Vi kan se att location fältet innehåller ett dokument. Och reviews fältet innehåller en mängd dokument.

Låt oss först använda Object.bsonSize() metod för att returnera storleken på dokumentet på översta nivån.

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

Resultat:

502

Vi kan se att hela dokumentet är 502 byte.

Observera att jag använder findOne() och inte find() . Anledningen till detta är att find() returnerar en markör i stället för själva dokumentet. findOne() metod, å andra sidan, returnerar det faktiska dokumentet och dess resultat bör därför vara korrekta.

Underdokument

Låt oss använda Object.bsonSize() för att kontrollera storleken på location fältet.

Vi kan använda punktnotation för att få värdet på location fält:

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

Resultat:

61

I det här fallet är dokumentet 61 byte.

Bara för att vara säker, här är vad vi faktiskt skickade till Object.bsonSize() metod:

db.bars.findOne().location

Resultat:

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

Så det är dokumentet som är på 61 byte.

Dokument i arrayer

Vi kan också hämta storleken på dokument som är delar av en array.

Exempel:

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

Resultat:

91

MongoDB-matriser är nollbaserade, så det här dokumentet är den första recensionen.

Vi kan köra argumentet för sig för att se hela dokumentet:

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

Resultat:

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

Projektioner

Vi kan använda Object.bsonSize() metod för att returnera storleken på dokumentet som returneras av en projektion. För att göra detta behöver vi helt enkelt tillhandahålla projektionen i vår fråga.

Exempel:

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

Resultat:

76

I det här fallet får vi en storlek på 76.

Du kanske har märkt att location i vårt tidigare exempel fältet var 61 byte, men nu är det 76.

Vad händer?

Tja, när vi använder projektioner, som vi är i det här exemplet, returnerar vi faktiskt ett yttre dokument som innehåller location fältnamnet och dess värde.

Det här är vad den här prognosen ger:

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

Resultat:

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

Men i vårt tidigare exempel gick vår fråga så här:

db.bars.findOne().location

Och returnerade detta:

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

Så vårt projektionsexempel returnerade ett större dokument, på grund av att det returnerade både fältnamnet och värdet. Och vårt tidigare exempel returnerade ett mindre dokument på grund av att det bara returnerade värdet.

Aggregation Pipeline

När du använder aggregeringspipelinen kan du använda $bsonSize operatör för att få storleken på ett dokument.

Du kan också använda $binarySize operatorn för att få storleken på en sträng eller binärt värdes innehåll i byte.


  1. Mongo-fråga som använder mongoid i rails-appen som orsakar markör-timeout-fel

  2. Node.js - Session kvarstår inte genom res.redirect()

  3. Vad är ett rent sätt att stoppa mongod på Mac OS X?

  4. Kan jag ändra befintligt index i MongoDB utan att ta bort det?