Làm cách nào để kiểm tra kích thước mảng trong MongoDB?

Khi làm việc với các bộ sưu tập MongoDB, đôi khi bạn có thể muốn tìm tài liệu chứa mảng dài nhất. Ví dụ: bạn có thể có một bộ sưu tập để lưu trữ áo sơ mi và mảng "kích cỡ" trong đó có thể chứa tất cả các kích cỡ mà áo sơ mi có sẵn. Trong trường hợp này, làm thế nào để bạn tìm thấy những chiếc áo sơ mi có số lượng kích cỡ lớn nhất?

Giả sử rằng chúng ta sử dụng bộ sưu tập "áo sơ mi" để lưu trữ các mẫu áo sơ mi có sẵn để bán. Hãy để chúng tôi điền vào nó một số dữ liệu mẫu

db.shirts.insertMany([
{ "_id" : 1, "name" : "Blue Shirt", sizes: [ "S", "M", "L"] },
{ "_id" : 2, "name" : "Stripped Shirt", sizes: [ "S", "M", "L","XL","XXL"] },
{ "_id" : 3, "name" : "Black Shirt", sizes: [ "S", "M", "L","XL","XXL","XXXL"] },
{ "_id" : 4, "name" : "Grey Shirt", sizes: [ "S", "M", "L","XXL"] },
{ "_id" : 5, "name" : "Green Shirt", sizes: [ "S", "M", "L"] },
]);

Từ dữ liệu, rõ ràng áo sơ mi Đen có số lượng kích cỡ lớn nhất. Làm cách nào để bạn tìm thấy điều này bằng truy vấn MongoDB? . Đoạn script sau trả về id tài liệu chứa Áo sơ mi đen có số lượng kích thước lớn nhất

Để hiểu cú pháp trên, chúng ta hãy tạo một bộ sưu tập với tài liệu. Truy vấn để tạo một bộ sưu tập với tài liệu như sau

>db.getSizeOfArray.insertOne({"StudentId":1,"StudentName":"Larry","StudentMarks":[87,34,5
6,77,89,90]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6ebc536fd07954a4890680")
}
>db.getSizeOfArray.insertOne({"StudentId":2,"StudentName":"Sam","StudentMarks":[90,76,56
]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6ebc6b6fd07954a4890681")
}
>db.getSizeOfArray.insertOne({"StudentId":3,"StudentName":"Carol","StudentMarks":[90,76]})
;
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6ebc7a6fd07954a4890682")
}

Bây giờ bạn có thể hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find(). Truy vấn như sau

Chúng tôi đã chia nhỏ chức năng chính của toán tử $size trong MongoDB thành các bước sau. Đầu tiên, nó khớp với một trường mảng đối với kích thước do người dùng chèn vào;

Cú pháp của toán tử $size được định nghĩa là

{array-field: {$size: }}

Ở đây, trường mảng đề cập đến tên của trường được nhắm mục tiêu trong tài liệu và độ dài của bất kỳ mảng nào biểu thị bất kỳ số nào khớp với độ dài

Cách sử dụng toán tử $size trong MongoDB

Trong hướng dẫn này, chúng tôi sẽ sử dụng cơ sở dữ liệu và tên bộ sưu tập sau

  • linuxhint là cơ sở dữ liệu mà chúng ta sẽ sử dụng ở đây
  • máy tính xách tay sẽ được sử dụng làm tên bộ sưu tập liên kết với cơ sở dữ liệu linuxhint

Trước khi đi sâu vào các ví dụ, hãy lấy danh sách các tài liệu có trong bộ sưu tập máy tính xách tay bằng lệnh sau

> db. máy tính xách tay. tìm thấy(). đẹp()

Làm cách nào để kiểm tra kích thước mảng trong MongoDB?

ví dụ 1. Sử dụng cơ bản toán tử kích thước $ trong MongoDB

Ví dụ này hướng dẫn bạn sử dụng cơ bản toán tử $size

Đề cập đến các tài liệu có trong bộ sưu tập “máy tính xách tay”, lệnh được đề cập bên dưới sẽ truy xuất tài liệu trong đó trường mảng có độ dài 3

> db. máy tính xách tay. tìm ({Làm. {$size. 3}}). đẹp()

Làm cách nào để kiểm tra kích thước mảng trong MongoDB?

Chỉ một tài liệu được truy xuất có chứa độ dài mảng là 3 trong trường “Tạo”

ví dụ 2. Sử dụng toán tử kích thước $ với các mảng lồng nhau

Vì cách sử dụng cơ bản của $size là để lấy đầu ra chỉ khớp với độ dài mảng đã chỉ định. Nó đếm một mảng lồng nhau như một thực thể duy nhất. Giả sử, có một mảng chứa một mảng lồng nhau và một giá trị, toán tử $size sẽ không tìm các giá trị của mảng lồng nhau, nhưng nó tính một giá trị duy nhất. Do đó, tổng chiều dài của mảng cha sẽ là “2“

Truy vấn Mongo được viết bên dưới sẽ truy xuất các tài liệu có độ dài mảng là “2“

> db. máy tính xách tay. tìm ({Làm. {$size. 2}}). đẹp()

Làm cách nào để kiểm tra kích thước mảng trong MongoDB?

Mặc dù, mảng tổ chứa 2 giá trị trong đó, nhưng nó được coi là một giá trị và do đó độ dài tổng thể của mảng cha là 2

ví dụ 3. Sử dụng toán tử kích thước $ với độ dài sai

Nếu bạn đã nhập độ dài không khớp trong bộ sưu tập được nhắm mục tiêu thì sao?

> db. máy tính xách tay. tìm ({Làm. {$size. 5}}). đẹp()

Làm cách nào để kiểm tra kích thước mảng trong MongoDB?

Lệnh sẽ được thực thi nhưng sẽ không hiển thị gì vì bộ sưu tập của chúng ta không có bất kỳ mảng nào có độ dài “5“

Ghi chú. Tuy nhiên, bạn có thể nhận được kết quả bằng cách sử dụng toán tử “$where” với toán tử “$exists”, nhưng việc thực thi sẽ chậm trong trường hợp này. Lệnh được đề cập dưới đây sẽ hiển thị các tài liệu có độ dài mảng lớn hơn hoặc bằng 4

> db. máy tính xách tay. tìm ({Làm. {$tồn tại. true}, $where. 'cái này. Chế tạo. chiều dài>=4'}). đẹp()

Phần kết luận

Toán tử truy vấn mảng được sử dụng trong MongoDB để truy xuất tài liệu bằng cách tham chiếu đến mảng. Các toán tử xử lý mảng trong MongoDB là $size, $all và $elemMatch. Hướng dẫn này hướng đến toán tử $size và bạn có thể xem phần giới thiệu ngắn gọn, sau đó là một số ví dụ về toán tử $size trong MongoDB. Công dụng chính của nó là lấy tài liệu từ một bộ sưu tập cụ thể bằng cách sử dụng độ dài của một mảng. Mặc dù chức năng tương tự cũng có thể đạt được bằng cách sử dụng các toán tử $where và $exists, nhưng chúng cần có thời gian và cú pháp dài để làm như vậy

Làm cách nào để kiểm tra kích thước mảng trong MongoDB?

Toán tử $size khớp với bất kỳ mảng nào với số phần tử được chỉ định bởi đối số. Ví dụ. db. thu thập.

Làm cách nào tôi có thể nhận được kích thước mảng?

Để tìm độ dài của mảng, bạn cần chia tổng dung lượng bộ nhớ cho kích thước của một phần tử - phương pháp này hoạt động . Vì vậy, bạn có thể chia tổng số byte cho kích thước của phần tử đầu tiên trong mảng.

Làm cách nào để kiểm tra kích thước MongoDB?

Có lẽ cách nhanh nhất và dễ dàng nhất để kiểm tra kích thước của bộ sưu tập MongoDB là sử dụng db. bộ sưu tập. phương thức dataSize() . Phương thức này trả về kích thước của bộ sưu tập theo byte.

Làm cách nào để tìm độ dài của một mảng trong cầy mangut?

Làm cách nào để tìm độ dài của mảng trong tập hợp Mongoose. Sử dụng $arrayElemAt với chỉ số 0 để truy cập mảng bên trong, theo sau là $size trả về độ dài của dữ liệu_kiểm tra .