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

MongoDB $ kích thước

Trong MongoDB, $size toán tử đường ống tổng hợp đếm và trả về tổng số mục trong một mảng.

$size toán tử chấp nhận một đối số. Đối số có thể là bất kỳ biểu thức hợp lệ nào phân giải thành một mảng.

Ví dụ

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

{ "_id" : 1, "data" : [ ] }
{ "_id" : 2, "data" : [ "a" ] }
{ "_id" : 3, "data" : [ "a", "b" ] }
{ "_id" : 4, "data" : [ "a", "b", "c" ] }
{ "_id" : 5, "data" : [ 1, 1, 1, 1 ] }

Chúng tôi có thể sử dụng $size để trả về số lượng mục trong các mảng trong dữ liệu data tương ứng các lĩnh vực.

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2, 3, 4, 5 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $size: [ "$data" ] }
          }
     }
   ]
)

Kết quả:

{ "data" : [ ], "result" : 0 }
{ "data" : [ "a" ], "result" : 1 }
{ "data" : [ "a", "b" ], "result" : 2 }
{ "data" : [ "a", "b", "c" ], "result" : 3 }
{ "data" : [ 1, 1, 1, 1 ], "result" : 4 }

Mảng lồng nhau

$size toán tử không đi xuống các mảng lồng nhau và đếm các phần tử của chúng. Nó đánh giá mảng từ cấp cao nhất.

Giả sử chúng ta có tài liệu sau trong bộ sưu tập của mình:

{ "data" : [ [ 1, 2 ], 3 ], "result" : 2 }

Và chúng tôi áp dụng $size về điều đó:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 6 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $size: [ "$data" ] }
          }
     }
   ]
)

Kết quả:

{ "data" : [ [ 1, 2 ], 3 ], "result" : 2 }

Mảng lồng nhau được tính là một phần tử (bất kể nó chứa bao nhiêu phần tử).

Loại dữ liệu sai

Đối số có thể là bất kỳ biểu thức hợp lệ nào, miễn là nó phân giải thành một mảng. Nếu nó không giải quyết được một mảng, thì một lỗi sẽ được tạo ra.

Giả sử chúng ta có tài liệu sau:

{ "_id" : 7, "data" : 3 }

Dữ liệu data trường không phân giải thành một mảng.

Đây là những gì sẽ xảy ra khi chúng tôi áp dụng $size vào trường đó:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 7 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $size: [ "$data" ] }
          }
     }
   ]
)

Kết quả:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "The argument to $size must be an array, but was of type: double",
	"code" : 17124,
	"codeName" : "Location17124"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

Thông báo lỗi cho chúng ta biết rằng The argument to $size must be an array, but was of type: double .

Các trường bị thiếu

Nếu trường không tồn tại trong tài liệu, một lỗi sẽ được trả về.

Giả sử chúng ta có tài liệu sau:

{ "_id" : 8 }

Và chúng tôi áp dụng $size vào tài liệu đó:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 8 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $size: [ "$data" ] }
          }
     }
   ]
)

Kết quả:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "The argument to $size must be an array, but was of type: missing",
	"code" : 17124,
	"codeName" : "Location17124"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. sử dụng cho thời gian tạo ObjectId mongodb

  2. Sự cố khi trả về dữ liệu được truy xuất từ ​​các truy vấn DB được gọi trong vòng lặp

  3. Nhận ID tài liệu được chèn lần cuối trong MongoDB với trình điều khiển Java

  4. Cách tốt nhất để lưu trữ ngày tháng trong MongoDB là gì?

  5. MongoDB $ setIntersection