【发布时间】:2018-02-26 21:18:46
【问题描述】:
我有类似如下的mongo文档:
{"client" : "ashwini",
"data" : [
{
.....
"ac" : [
{
"cord" : [
5.0,
0.0
],
"power" : 10.0,on:true
},
{
"cord" : [
52.0,
0.0
],
"power" : 22.0,on:true
},
{
"cord" : [
85.0,
0.0
],
"power" : 50.0,on:false
},
{
"cord" : [
5.0,
50.0
],
"power" : 30.0,on:true
}
],
"fan" : [
{
"cord" : [
10.0,
20.0
],
"power" : 50.0,on:true
},
{
"cord" : [
60.0,
20.0
],
"power" : 10.0,on:true
},
{
"cord" : [
85.0,
20.0
],
"power" : 40.0,on:false
},
{
"cord" : [
10.0,
70.0
],
"power" : 10.0,on:true
}
],
"light" : [
{
"cord" : [
30.0,
0.0
],
"power" : 34.0,on:true
},
{
"cord" : [
66.0,
0.0
],
"power" : 10.0,on:true
},
{
"cord" : [
82.0,
90.0
],
"power" : 69.0,on:true
},
{
"cord" : [
20.0,
50.0
],
"power" : 70.0,on:true
}
],
"name" : "Palm Meadows",
"floor" : -1.0
},
......
]
}
我希望查询的输出如下:
{
agr:{
lights:10,
ac:10,
fan:20
},
split:[
{
name:"Palm Meadows",
power:40,
location:"Mahadevpura",
lights:10,
ac:10,
fan:20
},
....
],
}
其中第一个 agr 是客户端“ashwini”的灯光/交流/风扇字段中所有功率的总和,该客户端“ashwini”已打开并拆分具有按名称和位置唯一的灯光/交流/风扇的单独总和
我的第一次试验如下
db.getCollection('property').aggregate([
{$match:{"client":"ashwini"}},
{
$group:{
_id:"$_id",
values:{
$addToSet:{
name:"$data.name",
floor:"$data.floor",
location:"$data.location",
lights:{$sum:"$data.lights.power"},
fan:{$sum:"$data.fan.power"},
ac:{$sum:"$data.ac.power"}
}
}
}
}
])
输出如下
我不确定如何达到我的要求
【问题讨论】:
标签: mongodb mongoose mongodb-query aggregation-framework