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

MongoDB $binarySize

От MongoDB 4.4 можете да използвате $binarySize Оператор на конвейер за агрегиране, за да върне размера на съдържанието на даден низ или стойност на двоични данни в байтове.

Той приема всеки валиден израз, стига да се разрешава до стойност на низ или двоични данни. Аргументът може също да бъде null , в който случай $binarySize връща null .

Пример

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

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

Можем да използваме $binarySize оператор за проверка на размера на различни полета.

Пример:

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

Резултат:

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

В този случай връщаме двоичния размер на title полето и body поле.

Нулеви стойности

Ако стойността на посоченото поле е null , $binarySize операторът ще върне null .

Пример:

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

Резултат:

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

В този случай status полето в нашия документ е null , и така $binarySize върна null .

Грешни типове данни

Както споменахме, $binarySize приема всеки валиден израз, стига да се разрешава до низ, стойност на двоични данни или null .

Ето пример за това какво се случва, ако предоставите израз, който се разрешава до различен тип BSON:

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

Резултат:

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

В този случай се опитахме да намерим размера на масив, но това не е един от поддържаните типове BSON, така че получаваме грешка.

Все пак можем да получим размера на отделните елементи на масива (стига да са един от поддържаните типове).

Пример:

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

Резултат:

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

В този пример получаваме размера на първия елемент на масива (масивите са базирани на нула, така че 0 се отнася до първия елемент).

Размер на документа

MongoDB също има $bsonSize оператор, който ви позволява да получите размера на документ.

Друг начин да получите размера на документа е да използвате Object.bsonSize() метод.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ако имам идентификатор на документ mongo като низ, как да го потърся като _id?

  2. Java/MongoDB заявка по дата

  3. Проблем с инсталирането на драйвер на PHP MongoDb на wamp

  4. MongoDB:Ужасна производителност на MapReduce

  5. Намерете документи с масиви, които не съдържат документ с определена стойност на полето в MongoDB