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

MongoDB $binarySize

Od MongoDB 4.4 můžete použít $binarySize operátor agregačního kanálu, který vrátí velikost daného řetězce nebo obsahu binární datové hodnoty v bajtech.

Přijímá jakýkoli platný výraz, pokud se překládá na hodnotu řetězce nebo binárních dat. Argument může být také null , v takovém případě $binarySize vrátí null .

Příklad

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

{
	"_id" : 1,
	"title" : "Hello World!",
	"body" : "This is a test post for the purposes of testing",
	"tags" : [
		"html",
		"css",
		"sql",
		"xml"
	],
	"status" : null
}

Můžeme použít $binarySize operátor pro kontrolu velikosti různých polí.

Příklad:

db.posts.aggregate([
  {
    $project: {
      "titleSize": { $binarySize: "$title" },
      "bodySize": { $binarySize: "$body" }
    }
  }
])

Výsledek:

{ "_id" : 1, "titleSize" : 12, "bodySize" : 47 }

V tomto případě vrátíme binární velikost title pole a body pole.

Nulové hodnoty

Pokud je hodnota zadaného pole null , $binarySize operátor vrátí null .

Příklad:

db.posts.aggregate([
  {
    $project: {
      "statusSize": { $binarySize: "$status" }
    }
  }
])

Výsledek:

{ "_id" : 1, "statusSize" : null }

V tomto případě status pole v našem dokumentu je null , a tak $binarySize vrátil null .

Chybné datové typy

Jak již bylo zmíněno, $binarySize přijímá jakýkoli platný výraz, pokud se překládá buď na řetězec, binární datovou hodnotu nebo null .

Zde je příklad toho, co se stane, když zadáte výraz, který se převede na jiný typ BSON:

db.posts.aggregate([
  {
    $project: {
      "tagsSize": { $binarySize: "$tags" }
    }
  }
])

Výsledek:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$binarySize requires a string or BinData argument, found: array",
	"code" : 51276,
	"codeName" : "Location51276"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

V tomto případě jsme se pokusili najít velikost pole, ale to není jeden z podporovaných typů BSON, takže se zobrazí chyba.

Stále však můžeme získat velikost jednotlivých prvků pole (pokud jsou jedním z podporovaných typů).

Příklad:

db.posts.aggregate([
  {
    $project: {
      "tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
    }
  }
])

Výsledek:

{ "_id" : 1, "tagsSize" : 4 }

V tomto příkladu získáme velikost prvního prvku pole (pole jsou založeny na nule, takže 0 odkazuje na první prvek).

Velikost dokumentu

MongoDB má také $bsonSize operátor, který vám umožní získat velikost dokumentu.

Dalším způsobem, jak získat velikost dokumentu, je použít Object.bsonSize() metoda.


  1. Jak přidružit vlastnosti k objektu socket.io v Redis Store?

  2. Rescue Timeout::Chyba z Redis Gem (Ruby)

  3. Jak oddělit databázi redis pro stejné dvě aplikace v node.js

  4. Příkaz MongoDB count