我用uniCloud 查询多行数据数据通过,进行数据汇总
//构建测试数据
db.collection('test').remove()
await db.collection('test').add({_id:"test1",objectfld:{A:1,B:2}})
await db.collection('test').add({_id:"test2",objectfld:{A:1,C:2}})
//汇总返回,两个组中都有A,所以数量相加
let d = db.collection('test').field('objectToArray(objectfld) as arr')
.unwind('$arr').group({_id: '$arr.k',v: $.sum('$arr.v')})
.get()
console.log(d)
返回的格式为 [{"_id":"A","num":2},{"_id":"B","num":2},{"_id":"c","num":2}]
但我期待的返回 {A:2,B:2,C:2}
照着官方文档试了一晚上,不是位置不对,就是格式不对,要不就是返回的数据不对
大概期待的返回的代码是
let d = db.collection('test').field('objectToArray(objectfld) as arr')
.unwind('$arr').group({_id: '$arr.k',v: $.sum('$arr.v')})
.field('arrayToObject(arr) as obj') //这一行field提示位置不对,那正确的写法是什么呢?
.get()
请问,我应该怎么做?
3***@qq.com (作者)
是的,数量不定
,objectfld:{A:1,B:2}})
objectfld:{A:1,C:2,E:3,F:2}})
objectfld:{A:1,B:1,C:2}})
以上都有可能,还有可能更多,因为数量有大小限制,想转化为object 节省空间
因为返回的记录是分类汇总,有多条,如果不转可能出问题
有些有重复,有些没有重复
2022-12-31 12:28
DCloud_uniCloud_WYQ
回复 3***@qq.com: [{"_id":"A","num":2},{"_id":"B","num":2},{"_id":"c","num":2}] 返回这个格式再用js处理吧,没必要把工作都交给数据库
2022-12-31 13:11
3***@qq.com (作者)
回复 DCloud_uniCloud_WYQ: 主要是数据量太大了,我想格式紧凑一点,节约流量,你看有没有啥好的办法?
2022-12-31 18:06
DCloud_uniCloud_WYQ
回复 3***@qq.com: 这么计算之后有多少条?
2022-12-31 19:54
3***@qq.com (作者)
回复 DCloud_uniCloud_WYQ: 条数没变,就是字符数变少一点而已
2023-01-01 00:03