MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $binarySize

Od MongoDB 4.4 możesz użyć $binarySize operator potoku agregacji, który zwraca rozmiar danego ciągu lub zawartość wartości danych binarnych w bajtach.

Akceptuje każde prawidłowe wyrażenie, o ile jest ono wynikiem łańcucha lub wartości danych binarnych. Argumentem może być również null , w takim przypadku $binarySize zwraca null .

Przykład

Załóżmy, że mamy kolekcję o nazwie posts z następującym dokumentem:

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

Możemy użyć $binarySize operatora, aby sprawdzić rozmiar różnych pól.

Przykład:

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

Wynik:

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

W takim przypadku zwracamy binarny rozmiar title pole i body pole.

Wartości puste

Jeśli wartość określonego pola to null , $binarySize operator zwróci null .

Przykład:

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

Wynik:

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

W tym przypadku status pole w naszym dokumencie to null , a więc $binarySize zwrócono null .

Niewłaściwe typy danych

Jak wspomniano, $binarySize akceptuje dowolne poprawne wyrażenie, o ile jest tłumaczone na ciąg, wartość danych binarnych lub null .

Oto przykład tego, co się stanie, jeśli podasz wyrażenie, które jest tłumaczone na inny typ BSON:

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

Wynik:

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

W tym przypadku próbowaliśmy znaleźć rozmiar tablicy, ale nie jest to jeden z obsługiwanych typów BSON, więc pojawia się błąd.

Jednak nadal możemy uzyskać rozmiar poszczególnych elementów tablicy (o ile są one jednym z obsługiwanych typów).

Przykład:

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

Wynik:

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

W tym przykładzie otrzymujemy rozmiar pierwszego elementu tablicy (tablice są liczone od zera, więc 0 odnosi się do pierwszego elementu).

Rozmiar dokumentu

MongoDB ma również $bsonSize operatora, który umożliwia określenie rozmiaru dokumentu.

Innym sposobem na uzyskanie rozmiaru dokumentu jest użycie Object.bsonSize() metoda.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można połączyć się z serwerem 127.0.0.1:27017

  2. za dużo otwartych plików na serwerze mgo go

  3. Dodaj jakiś numer wiersza do agregującego polecenia / potoku mongodb

  4. Wybierz dane, w których zakres między dwoma różnymi polami zawiera podaną liczbę

  5. Uwierzytelnianie MongoDB-CR nie powiodło się