MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB $ binarySize

Từ MongoDB 4.4, bạn có thể sử dụng $binarySize toán tử đường ống tổng hợp để trả về kích thước của một chuỗi nhất định hoặc nội dung của giá trị dữ liệu nhị phân tính bằng byte.

Nó chấp nhận bất kỳ biểu thức hợp lệ nào miễn là nó phân giải thành giá trị dữ liệu chuỗi hoặc nhị phân. Đối số cũng có thể là null , trong trường hợp đó, $binarySize trả về null .

Ví dụ

Giả sử chúng ta có một bộ sưu tập được gọi là posts với tài liệu sau:

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

Chúng ta có thể sử dụng $binarySize toán tử để kiểm tra kích thước của các trường khác nhau.

Ví dụ:

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

Kết quả:

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

Trong trường hợp này, chúng tôi trả về kích thước nhị phân của title trường và body trường.

Giá trị rỗng

Nếu giá trị của trường được chỉ định là null , $binarySize toán tử sẽ trả về null .

Ví dụ:

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

Kết quả:

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

Trong trường hợp này, status trường trong tài liệu của chúng tôi là null và như vậy $binarySize trả về null .

Loại dữ liệu sai

Như đã đề cập, $binarySize chấp nhận bất kỳ biểu thức hợp lệ nào miễn là nó phân giải thành một chuỗi, một giá trị dữ liệu nhị phân hoặc null .

Dưới đây là một ví dụ về những gì sẽ xảy ra nếu bạn cung cấp một biểu thức phân giải thành một loại BSON khác:

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

Kết quả:

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

Trong trường hợp này, chúng tôi đã cố gắng tìm kích thước của một mảng, nhưng đó không phải là một trong các loại BSON được hỗ trợ, vì vậy chúng tôi gặp lỗi.

Tuy nhiên, chúng tôi vẫn có thể lấy kích thước của các phần tử mảng riêng lẻ (miễn là chúng thuộc một trong các loại được hỗ trợ).

Ví dụ:

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

Kết quả:

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

Trong ví dụ này, chúng tôi nhận được kích thước của phần tử mảng đầu tiên (các mảng dựa trên 0, vì vậy 0 đề cập đến phần tử đầu tiên).

Kích thước tài liệu

MongoDB cũng có $bsonSize toán tử, cho phép bạn lấy kích thước của tài liệu.

Một cách khác để lấy kích thước của tài liệu là sử dụng Object.bsonSize() phương pháp.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose Giá trị duy nhất trong mảng đối tượng lồng nhau

  2. Mongoose:dân số sâu (điền vào một trường đông dân cư)

  3. MongoDB shell và máy chủ không khớp

  4. MongoDB sử dụng mệnh đề OR trong mongoengine

  5. Cách tìm kiếm trong mảng đối tượng trong mongodb