您的运算符中需要一个条件表达式,该表达式$sum
将使用比较运算符检查cityid , starRating, area, locality
键的值$eq
。
您可以通过添加此表达式来重组管道,如下所示:
db.hotelCollection.aggregate([
{ "$match": { "cityid": 123 } },
{
"$group" : {
"_id": null,
"1star": {
"$sum": {
"$cond": [
{ "$eq": ["$starRating", 1] },
1, 0
]
}
},
"2star": {
"$sum": {
"$cond": [
{ "$eq": ["$starRating", 2] },
1, 0
]
}
},
"3star": {
"$sum": {
"$cond": [
{ "$eq": ["$starRating", 3] },
1, 0
]
}
},
"area1": {
"$sum": {
"$cond": [
{ "$eq": ["$area", 1] },
1, 0
]
}
},
"area2": {
"$sum": {
"$cond": [
{ "$eq": ["$area", 2] },
1, 0
]
}
},
"locality1": {
"$sum": {
"$cond": [
{ "$eq": ["$locality", 1] },
1, 0
]
}
},
"locality2": {
"$sum": {
"$cond": [
{ "$eq": ["$locality", 2] },
1, 0
]
}
}
}
},
{
"$project" : {
"_id": 0,
"starCount": {
"1Star": "$1star",
"2Star": "$2star",
"3Star": "$3star"
},
"areaCount": {
"area1": "$area1",
"area2": "$area2"
},
"localityCount": {
"locality1": "$locality1",
"locality2": "$locality2"
}
}
}
])