3***@qq.com
3***@qq.com
  • 发布:2022-12-30 23:11
  • 更新:2022-12-31 12:06
  • 阅读:210

数组如何转化为对象?

分类:uniCloud

我用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()

请问,我应该怎么做?

2022-12-30 23:11 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

objectfld里面有无数个key-value吗?

  • 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

要回复问题请先登录注册