1 mongodb aggregation-framework mongodb-aggregation
我想对此架构执行查询:
{
"name" : "xxx",
"guests" : [
{
"category" : "category 1",
"arrived" : false
},
{
"category" : "category 2",
"arrived" : false
},
{
"category" : "category 1",
"arrived" : true
},
{
"category" : "category 2",
"arrived" : true
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想得到一个特定的名字,一个列表,列出每个类别的客人百分比.
对于上面的文档作为示例,我想收到:
{
name : "xxx",
results : [
{
category : "category 1",
arrived : 50 (percent)
},
{
category : "category 2",
arrived : 50 (percent)
},
]
Run Code Online (Sandbox Code Playgroud)
有没有办法用一个MongoDB查询来做到这一点?另外,我应该在客户端还是服务器端进行此计算?
你可以使用聚合.这是一个例子:
[
{
$match: {name:"xxx"}
},
{
$unwind: "$guests"
},
{
$group: {
_id:"$guests.category",
guests_arrived: {
$sum: { $cond: [ {$eq:["$guests.arrived",true]}, 1, 0 ] }
},
guests_total: {
$sum: 1
}
}
},
{
$project:{
_id: false,
category: "$_id",
guests_arrived:true,
guests_total:true,
"percent": {
$multiply: [
100,
{$divide: ["$guests_arrived","$guests_total"]}
]
}
}
}
]
Run Code Online (Sandbox Code Playgroud)
使用的聚合管道阶段的说明:
$匹配 on name,因为您只需要特定名称的结果
$放松的客人阵列,使我们可以在下一阶段对其成员进行聚合函数
按类别分组$以便$ sum总计客人和已到达的客人数量 $ cond/$ eq用于评估到达并且仅在到达时添加到guests_arrived = true
$项目与计算基于聚合值百分比的主要目的,guests_arrived和guests_total,从前一阶段
| 归档时间: |
|
| 查看次数: |
482 次 |
| 最近记录: |