您希望.aggregate() 在此处使用$cond 三元运算符来确定$group 的分组ID:
db.collection.aggregate([
{ "$match": {
"price": { "$gte": 100, "$lte" 500 }
}},
{ "$group": {
"_id": {
"$cond": [
{ "$lte": [ "$price", 200 ] },
"100-200",
{ "$cond": [
{ "$lte": [ "$price", 300 ] },
"200-300",
{ "$cond": [
{ "$lte": [ "$price", 400 ] },
"300-400",
"400-500"
]}
]}
]
},
"count": { "$sum": 1 }
}}
])
作为“三元”if/then/else$cond 将评估第一个参数“if”中的表达式,然后返回第二个参数“then”true 或第三个“else”false .
级联逻辑意味着您将每个三元运算“嵌套”在false 断言中,直到获得最终结果。
使用条件提供的分组_id 值,然后您只需使用$sum 和1 参数来“计数”组中的匹配项。
这会给你一个关于样本的响应:
{ "_id": "100-200", "count": 2 }
{ "_id": "400-500", "count": 1 }
$match 确保所有结果都在将要测试的“范围”内。如果您排除它,那么如果 "price" 超出预期的“范围”,您可能希望最后一个 $cond“else”条件返回另一个值。
如果您希望返回“每个”范围,那么您最好检查结果并为每个未返回的范围插入一个 0 计数条目。