Chúng ta có thể sử dụng tính năng đếm với hàm tổng hợp trong MongoDB không?

Hàm tạo tổng hợp được sử dụng để xây dựng đường ống tổng hợp. Không khởi tạo trực tiếp lớp này, hãy sử dụng Model. tổng hợp() thay vì

Ví dụ

const aggregate = Model.aggregate([
  { $project: { a: 1, b: 1 } },
  { $skip: 5 }
]);

Model.
  aggregate([{ $match: { age: { $gte: 21 }}}]).
  unwind('tags').
  exec(callback);

Ghi chú

  • Các tài liệu được trả về là các đối tượng javascript đơn giản, không phải tài liệu cầy mangut (vì bất kỳ hình dạng tài liệu nào cũng có thể được trả về)

  • Mongoose không cast giai đoạn đường ống. Dưới đây sẽ không hoạt động trừ khi

    await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    4 là một chuỗi trong cơ sở dữ liệu

    tổng hợp mới([{ $match. { _Tôi. '00000000000000000000000a' } }]); . { _Tôi. cầy mangut mới. các loại. ObjectId('00000000000000000000000a') } }]);


Trả về một asyncIterator để sử dụng với các vòng lặp

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
5 Bạn không cần gọi hàm này một cách rõ ràng, bộ thực thi JavaScript sẽ gọi nó cho bạn

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}

Nút. js 10. x hỗ trợ các trình vòng lặp không đồng bộ mà không có bất kỳ cờ nào. Bạn có thể bật trình vòng lặp không đồng bộ trong Nút. js 8. x sử dụng cờ

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
6

Ghi chú. Chức năng này không được đặt nếu

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
7 không được xác định. Nếu
await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
7 không được xác định, điều đó có nghĩa là Nút của bạn. phiên bản js không hỗ trợ trình vòng lặp không đồng bộ


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    9 Đặc tả trường «Đối tượng»
trả lại
Nhìn thấy

Nối một toán tử $addFields mới vào đường dẫn tổng hợp này. Yêu cầu MongoDB v3. 4+ để làm việc

Ví dụ


Thông số
  • const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
    
    0 «Boolean» Nên thông báo cho máy chủ rằng nó có thể sử dụng ổ cứng để lưu trữ dữ liệu trong quá trình tổng hợp
trả lại
Nhìn thấy

Đặt tùy chọn allowDiskUse cho truy vấn tổng hợp

Ví dụ

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);


Thông số
  • const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
    
    1 «Đối tượng. Array[Object]» (các) toán tử để nối thêm. Có thể là sự trải rộng của các đối tượng hoặc một tham số duy nhất của một mảng đối tượng
trả lại

Nối các toán tử mới vào đường ống tổng hợp này

Ví dụ


Thông số
trả lại

Thực thi truy vấn trả về một

const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
2 sẽ được giải quyết bằng (các) tài liệu hoặc bị từ chối do lỗi. Giống như
const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
3, nhưng chỉ nhận một trình xử lý từ chối. Tương thích với
const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
4


Thông số
trả lại
Nhìn thấy

Thêm một đối chiếu

Ví dụ

________số 8


Thông số
  • const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
    
    5 «Chuỗi» Tên của trường đầu ra có giá trị là số đếm. Nó phải là một chuỗi không rỗng, không được bắt đầu bằng $ và không được chứa. nhân vật
trả lại
Nhìn thấy

Nối một toán tử $count mới vào đường dẫn tổng hợp này

Ví dụ

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
6


Thông số
  • const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
    
    6 «Đối tượng»
    • const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
      
      7 «Số» đặt kích thước lô con trỏ
    • const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
      
      8 «Boolean» sử dụng con trỏ tổng hợp dành riêng cho cầy mangut thử nghiệm (đối với
      const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
      
      9 và ngữ nghĩa con trỏ truy vấn khác)
trả lại
  • Con trỏ «AggregationCursor» đại diện cho tập hợp này
Nhìn thấy

Đặt tùy chọn

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
60 và thực hiện phép tổng hợp này, trả về một con trỏ tổng hợp. Con trỏ rất hữu ích nếu bạn muốn xử lý từng kết quả một lần vì kết quả tổng hợp quá lớn để vừa với bộ nhớ

Ví dụ


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    9 «Đối tượng» $densify nội dung toán tử
trả lại
Nhìn thấy

Nối một toán tử $densify mới vào đường dẫn tổng hợp này

Ví dụ

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
3


Thông số
trả lại
  • «Promise» Trả về một Promise nếu không có "callback" nào được đưa ra

Thực thi đường ống tổng hợp trên Mô hình hiện đang bị ràng buộc

Ví dụ


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    62 «Chuỗi»
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    63 «Hàm» Hàm gọi lại để gọi, nếu không được chỉ định, thay vào đó sẽ trả về một Lời hứa
trả lại
  • «Promise» Trả về một lời hứa nếu không có "callback" nào được đưa ra

Thực hiện tổng hợp với giải thích

Ví dụ

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
6


Thông số
trả lại
Nhìn thấy

Kết hợp nhiều đường ống tổng hợp

Ví dụ


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    9 «Đối tượng» $fill nội dung toán tử
trả lại
Nhìn thấy

Nối một toán tử $fill mới vào đường dẫn tổng hợp này

Ví dụ

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
8


Thông số
  • const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
    
    6 «Đối tượng» đến $graphLookup như được mô tả trong liên kết trên
trả lại
Nhìn thấy

Nối (các) toán tử $graphLookup tùy chỉnh mới vào quy trình tổng hợp này, thực hiện tìm kiếm đệ quy trên một bộ sưu tập

Lưu ý rằng graphLookup chỉ có thể tiêu thụ tối đa 100 MB bộ nhớ và không cho phép sử dụng đĩa ngay cả khi chỉ định

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
66

Ví dụ


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    9 «Đối tượng» nội dung của toán tử $group
trả lại
Nhìn thấy

Nối một toán tử $group tùy chỉnh mới vào đường dẫn tổng hợp này

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
2


Thông số
  • const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
    
    0 «Đối tượng. Chuỗi» một đối tượng gợi ý hoặc tên chỉ mục
trả lại
Nhìn thấy

Đặt tùy chọn gợi ý cho truy vấn tổng hợp

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
4


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    69 «Số» số bản ghi tối đa để chuyển sang giai đoạn tiếp theo
trả lại
Nhìn thấy

Nối một toán tử giới hạn $ mới vào đường dẫn tổng hợp này

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
0


Thông số
  • const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
    
    6 «Đối tượng» đến $lookup như được mô tả trong liên kết trên
trả lại
Nhìn thấy

Nối toán tử tra cứu $ tùy chỉnh mới vào đường dẫn tổng hợp này

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
1


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    9 «Đối tượng» $match nội dung toán tử
trả lại
Nhìn thấy

Nối một toán tử $match tùy chỉnh mới vào đường dẫn tổng hợp này

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
2


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    3 «Mô hình» Đặt mô hình được liên kết với tổng hợp này. Nếu không được cung cấp, trả về mô hình đã được lưu trữ
trả lại

Nhận/đặt mô hình mà tập hợp này sẽ thực thi trên

Ví dụ


Thông số
trả lại
Nhìn thấy

Nối một toán tử $geoNear mới vào đường dẫn tổng hợp này

Ghi chú

PHẢI được sử dụng làm toán tử đầu tiên trong đường ống

Ví dụ


Thông số
  • const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
    
    6 Phím «Object» để hợp nhất vào các tùy chọn hiện tại
    • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
      
      34 Boolean «Boolean» nếu đúng, máy chủ MongoDB sẽ sử dụng ổ cứng để lưu trữ dữ liệu trong quá trình tổng hợp này
trả lại
Nhìn thấy

Cho phép bạn đặt các tùy chọn tùy ý, cho phần mềm trung gian hoặc plugin

Ví dụ


Loại

trả lại
  • «Mảng» Đường dẫn hiện tại tương tự như thao tác sẽ được thực thi

Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    9 «Đối tượng. Chuỗi» đặc tả trường
trả lại
Nhìn thấy

Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    36 «Chuỗi. ReadPreference» một trong các tùy chọn ưu tiên được liệt kê hoặc bí danh của chúng
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    37 thẻ tùy chọn «Array» cho truy vấn này. KHÔNG DÙNG
trả lại
Nhìn thấy

Đặt tùy chọn readPreference cho truy vấn tổng hợp

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
3


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    38 «Chuỗi» một trong những cấp độ quan tâm đã đọc được liệt kê hoặc bí danh của chúng
trả lại
Nhìn thấy

Đặt mức readConcern cho truy vấn tổng hợp

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
4


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    39 «Đối tượng» tùy chọn biên tập lại hoặc biểu thức điều kiện
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    60 «Chuỗi. Đối tượng» trường hợp đúng cho điều kiện
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    61 «Chuỗi. Đối tượng» trường hợp sai cho điều kiện
trả lại
Nhìn thấy

Nối một toán tử $redact mới vào đường dẫn tổng hợp này

Nếu 3 đối số được cung cấp, Mongoose sẽ bao bọc chúng bằng if-then-else của toán tử $cond tương ứng Nếu

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
62 hoặc
await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
63 là chuỗi, hãy đảm bảo rằng nó bắt đầu bằng $$, chẳng hạn như
await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
64,
await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
65 hoặc
await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
66

Ví dụ


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    67 «Chuỗi. Đối tượng» trường hoặc tài liệu sẽ trở thành tài liệu gốc mới
trả lại
Nhìn thấy

Nối một toán tử $replaceRoot mới vào đường dẫn tổng hợp này

Lưu ý rằng toán tử

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
68 yêu cầu chuỗi trường bắt đầu bằng '$'. Nếu bạn đang chuyển vào một chuỗi, Mongoose sẽ thêm '$' vào trước nếu trường được chỉ định không bắt đầu '$'. Nếu bạn đang truyền vào một đối tượng, các chuỗi trong biểu thức của bạn sẽ không bị thay đổi

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
5


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    69 «Number» số tài liệu ngẫu nhiên để chọn
trả lại
Nhìn thấy

Nối toán tử $sample tùy chỉnh mới vào đường dẫn tổng hợp này

Ví dụ


Thông số
trả lại
Nhìn thấy

Thông số
trả lại
Nhìn thấy

Đặt phiên cho tập hợp này. Hữu ích cho các giao dịch

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
6


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    69 «Number» số bản ghi cần bỏ qua trước giai đoạn tiếp theo
trả lại
Nhìn thấy

Nối một toán tử $skip mới vào đường dẫn tổng hợp này

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
7


Thông số
trả lại
Nhìn thấy

Nối một toán tử $sort mới vào đường dẫn tổng hợp này

Nếu một đối tượng được thông qua, các giá trị được phép là

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
81,
await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
82,
await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
83,
await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
84,
await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
85 và
await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
86

Nếu một chuỗi được truyền, nó phải là một danh sách tên đường dẫn được phân tách bằng dấu cách. Thứ tự sắp xếp của mỗi đường dẫn tăng dần trừ khi tên đường dẫn có tiền tố là

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
87 sẽ được coi là giảm dần

Ví dụ


Thông số
trả lại
Nhìn thấy

Nối một toán tử $sortByCount mới vào đường dẫn tổng hợp này. Chấp nhận tên trường chuỗi hoặc đối tượng đường dẫn

Lưu ý rằng toán tử

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
88 yêu cầu gốc mới bắt đầu bằng '$'. Mongoose sẽ thêm '$' vào trước nếu tên trường được chỉ định không bắt đầu bằng '$'

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
8


Thông số
  • await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
    
    89 «Chức năng» gọi lại thành công
  • const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
    for await (const doc of agg) {
      console.log(doc.name);
    }
    
    20 «Chức năng» errorCallback
trả lại

Cung cấp chức năng

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
21 giống như Lời hứa, sẽ gọi
const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
22 mà không cần gọi lại Tương thích với
const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
4

Ví dụ

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
9


Thông số
  • const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });
    
    6 «Đối tượng» tới $unionVới truy vấn như được mô tả trong liên kết trên
trả lại
Nhìn thấy

Nối toán tử $unionWith mới vào đường dẫn tổng hợp này

Ví dụ

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);
0


Thông số
  • const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
    for await (const doc of agg) {
      console.log(doc.name);
    }
    
    25 «Chuỗi. Vật. Mảng[Chuỗi]. Mảng[Đối tượng]» (các) trường để thư giãn, dưới dạng tên trường hoặc dưới dạng đối tượng với các tùy chọn. Nếu truyền một chuỗi, tùy chọn thêm tiền tố vào tên trường bằng '$'. Nếu truyền một đối tượng, thì
    const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
    for await (const doc of agg) {
      console.log(doc.name);
    }
    
    26 phải bắt đầu bằng '$'
trả lại
Nhìn thấy

Nối thêm (các) toán tử $unwind tùy chỉnh mới vào quy trình tổng hợp này

Lưu ý rằng toán tử

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}
27 yêu cầu tên đường dẫn bắt đầu bằng '$'. Mongoose sẽ thêm '$' vào trước nếu trường được chỉ định không bắt đầu '$'

Làm cách nào để đếm dữ liệu trong MongoDB tổng hợp?

MongoDB tổng hợp phần tử $count trong mảng. MongoDB tổng số $count lớn hơn. .
Sau đó, kết nối với máy chủ
Truy cập bộ sưu tập Bán hàng MongoDB của cơ sở dữ liệu mydatabase
Sau đó, chúng tôi đã áp dụng thao tác tổng hợp $count để đếm số lượng tài liệu

Làm cách nào để sử dụng hàm đếm trong MongoDB?

Khi thực hiện đếm, MongoDB có thể trả về số đếm chỉ bằng cách sử dụng chỉ mục nếu. .
truy vấn có thể sử dụng một chỉ mục,
truy vấn chỉ chứa các điều kiện trên các khóa của chỉ mục và
vị từ truy vấn truy cập vào một phạm vi khóa chỉ mục liền kề duy nhất

Làm cách nào để sử dụng số lượng trong nhóm trong MongoDB?

Chúng ta có thể sử dụng đoạn mã sau để nhóm theo trường 'vị trí' và đếm số lần xuất hiện của từng vị trí. .
Vị trí 'Chuyển tiếp' xảy ra 1 lần
Vị trí 'Guard' xảy ra 3 lần
Vị trí 'Trung tâm' xuất hiện 1 lần

MongoDB có hỗ trợ các chức năng tổng hợp không?

Trong MongoDB, các hoạt động tổng hợp xử lý các bản ghi/tài liệu dữ liệu và trả về các kết quả được tính toán . Nó thu thập các giá trị từ các tài liệu khác nhau và nhóm chúng lại với nhau, sau đó thực hiện các loại hoạt động khác nhau trên dữ liệu được nhóm đó như tổng, trung bình, tối thiểu, tối đa, v.v. để trả về kết quả được tính toán.