Tôi có một tổng hợp bằng cách sử dụng $facet
; điều này cho phép thực hiện các truy vấn song song cho mỗi lần chuyển tài liệu. Vì vậy, chúng tôi truy vấn và đếm Cost
và Status
dưới dạng hai khía cạnh của cùng một truy vấn.
db.test.aggregate( [
{
$match: { fld1: "Data" }
},
{
$facet: {
cost: [
{ $match: { cost: { $exists: true } } },
{ $count: "count" }
],
status: [
{ $match: { status: { $exists: true } } },
{ $count: "count" }
],
}
},
{
$project: {
costCount: { $arrayElemAt: [ "$cost.count" , 0 ] },
statusCount: { $arrayElemAt: [ "$status.count" , 0 ] }
}
}
] )
Tôi nhận được kết quả là { "costCount" : 4, "statusCount" : 3 }
, sử dụng các tài liệu sau:
{ _id: 1, fld1: "Data", cost: 12, status: "Y" },
{ _id: 2, fld1: "Data", status: "N" },
{ _id: 3, fld1: "Data" },
{ _id: 4, fld1: "Data", cost: 90 },
{ _id: 5, fld1: "Data", cost: 44 },
{ _id: 6, fld1: "Data", cost: 235, status: "N" },
{ _id: 9, fld1: "Stuff", cost: 0, status: "Y" }
LƯU Ý :Đây là một truy vấn tương tự sử dụng các khía cạnh: MongoDB Sắp xếp tùy chỉnh trên hai trường
.