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

2 způsoby, jak získat velikost dokumentu v MongoDB

Pokud potřebujete vrátit velikost dokumentu v MongoDB, můžete použít následující:

  • $bsonSize provozovatel agregačního potrubí
  • Funkce Object.bsonSize() metoda

Níže jsou uvedeny příklady každého přístupu.

Ukázková data

V následujících příkladech použijeme kolekci nazvanou products s následujícími dokumenty:

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

Všimněte si, že každé pole produktu obsahuje vložený dokument.

Můžeme vrátit velikost celého dokumentu nebo jen vloženého objektu.

$bsonSize Operátor agregačního potrubí

Můžeme použít $bsonSize operátor s $$ROOT systémová proměnná pro získání velikosti celého dokumentu. $$ROOT proměnná odkazuje na dokument, který je právě zpracováván kanálem.

Příklad:

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

Výsledek:

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

V tomto případě získáme velikost všech dokumentů v kolekci, ale vždy ji můžete filtrovat pouze na jeden nebo několik dokumentů.

Chcete-li získat velikost vložených dokumentů, můžeme nahradit $$ROOT proměnná s názvem pole dokumentů.

Příklad:

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

Výsledek:

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

V tomto případě je název pole product a proto používáme $product odkazovat na toto pole.

Viz MongoDB $bsonSize pro další informace a příklady.

Object.bsonSize() Metoda

Object.bsonSize() metoda je další způsob, jak získat velikost dokumentu.

Příklad:

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

Výsledek:

81

Tato metoda vrací pouze velikost a nic víc.

Všimněte si, že jsem použil findOne() namísto find() metoda. Udělal jsem to, protože find() vrátí pouze kurzor, zatímco findOne() vrátí skutečný dokument.

Velikost vloženého dokumentu můžeme získat připojením pomocí tečkové notace:

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

Výsledek:

54

Velikost dalšího dokumentu můžeme získat zadáním jeho _id jako argument dotazu:

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

Výsledek:

36

Viz MongoDB Object.bsonSize() pro další informace a příklady.


  1. Spuštění MongoDB s Ops Manager

  2. Vztahy MongoDB:vložit nebo odkazovat?

  3. Jak používat šifrování k ochraně dat MongoDB

  4. MongoDB:Aktualizace vnořeného dokumentu