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»
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
Đặ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
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ạiThự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ạiNhìn thấyThêm một đối chiếu
Ví dụ
________số 8Thô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
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); 6Thô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)
- Con trỏ «AggregationCursor» đại diện cho tập hợp nà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ử
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); 3Thô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
- «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); 6Thông sốtrả lạiNhìn thấyKế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ử
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); 8Thô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
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
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); } 2Thô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
Đặ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); } 4Thô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
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); } 0Thô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
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); } 1Thông số- await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true); 9 «Đối tượng» $match nội dung toán tử
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); } 2Thô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ữ
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ạiNhìn thấyNố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
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ạitrả lại- «Mảng» Đường dẫn hiện tại tương tự như thao tác sẽ được thực thi
- await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true); 9 «Đối tượng. Chuỗi» đặc tả trường
- 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
Đặ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); } 3Thô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
Đặ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); } 4Thô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
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
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); } 5Thông số- await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true); 69 «Number» số tài liệu ngẫu nhiên để chọn
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ạiNhìn thấyThông sốtrả lạiNhì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); } 6Thô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
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); } 7Thông sốtrả lạiNhìn thấyNố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ạiNhìn thấyNố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); } 8Thô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
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); } 9Thô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
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); 0Thô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 '$'
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 '$'