sql >> Database >  >> NoSQL >> MongoDB

2 manieren om de grootte van een document te krijgen in MongoDB

Als u de grootte van een document in MongoDB moet retourneren, kunt u het volgende gebruiken:

  • De $bsonSize aggregatie pijpleiding operator
  • De Object.bsonSize() methode

Hieronder staan ​​voorbeelden van elke benadering.

Voorbeeldgegevens

Voor de volgende voorbeelden gebruiken we een verzameling genaamd products met de volgende documenten:

{ "_id" : 1, "product" : { "name" : "Shirt - Short Sleeves", "color" : "White" } }
{ "_id" : 2, "product" : { "name" : "Cap", "color" : "Green" } }
{ "_id" : 3, "product" : { "name" : "Travel Pack", "color" : "Light Blue" } }

Merk op dat elk productveld een ingesloten document bevat.

We kunnen de grootte van het hele document teruggeven, of alleen het ingesloten object.

De $bsonSize Aggregatiepijplijnoperator

We kunnen de $bsonSize . gebruiken operator met de $$ROOT systeemvariabele om de grootte van het hele document te krijgen. De $$ROOT variabele verwijst naar het document dat momenteel door de pijplijn wordt verwerkt.

Voorbeeld:

db.products.aggregate([
  {
    $project: {
      "rootSize": { $sum: { $bsonSize: "$$ROOT" } }
    }
  }
])

Resultaat:

{ "_id" : 1, "rootSize" : 81 }
{ "_id" : 2, "rootSize" : 63 }
{ "_id" : 3, "rootSize" : 76 }

In dit geval krijgen we de grootte van alle documenten in de verzameling, maar u kunt deze altijd filteren op slechts één of meer documenten.

Om de grootte van de ingesloten documenten te krijgen, kunnen we de $$ROOT . vervangen variabele met de veldnaam van de documenten.

Voorbeeld:

db.products.aggregate([
  {
    $project: {
      "documentSize": { $sum: { $bsonSize: "$product" } }
    }
  }
])

Resultaat:

{ "_id" : 1, "documentSize" : 54 }
{ "_id" : 2, "documentSize" : 36 }
{ "_id" : 3, "documentSize" : 49 }

In dit geval is de veldnaam product en dus gebruiken we $product om naar dat veld te verwijzen.

Zie MongoDB $bsonSize voor meer informatie en voorbeelden.

De Object.bsonSize() Methode

De Object.bsonSize() methode is een andere manier om de grootte van een document te krijgen.

Voorbeeld:

Object.bsonsize(
    db.products.findOne()
)

Resultaat:

81

Deze methode retourneert alleen de grootte en niet meer.

Merk op dat ik de findOne() . heb gebruikt methode in plaats van de find() methode. Ik deed dit omdat find() geeft alleen een cursor terug, terwijl findOne() geeft het eigenlijke document terug.

We kunnen de grootte van het ingesloten document verkrijgen door het toe te voegen met behulp van puntnotatie:

Object.bsonsize(
    db.products.findOne().product
)

Resultaat:

54

We kunnen de grootte van het volgende document krijgen door zijn _id . op te geven als het query-argument:

Object.bsonsize(
    db.products.findOne({_id:2}).product
)

Resultaat:

36

Zie MongoDB Object.bsonSize() voor meer informatie en voorbeelden.


  1. Fout bij het laden van gedeelde bibliotheken, kan het gedeelde objectbestand niet openen:geen bestand of map (hiredis)

  2. Indexprefixcompressie in MongoDB 3.0 WiredTiger

  3. MongoDB-installatie

  4. Hoe krijg ik alle openstaande taken in de laravel-wachtrij op redis?