lazybone2021
lazybone2021
  • 发布:2021-08-25 15:54
  • 更新:2021-08-25 17:57
  • 阅读:734

求问,uniCloud中使用云函数如何把数据表分组返回?

分类:uniCloud

表结构:
{
"bsonType": "object",
"required": ["type", "name", "intro", "tag"],
"permission": {
"read": false,
"create": false,
"update": false,
"delete": false
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
},
"type": {
"bsonType": "string",
"description": "类型:img、radio、audio、http、article",
"maxLength": 10
},
"name": {
"bsonType": "string",
"description": "名称",
"maxLength": 40
},
"intro": {
"bsonType": "string",
"description": "简介",
"maxLength": 40
}
}
}

前端需要按type类型,分组展示,想要得到的数据结构为

{
'img':[{……},{……}],
'radio':[{……},{……}],
'audio':[{……},{……}],
……
}

但是尝试对着文档用group,只会得到
[
{
_id:{type:'img'}
},
{
_id:{type:'radio'}
},
{
_id:{type:'audio'}
}
]

而在云函数中,也不能是groupBy(),小白一个,请教大佬们要如何在云函数中解决?

2021-08-25 15:54 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

云函数里面可以用group

  • lazybone2021 (作者)

    可是group只能返回表中指定字段有几种类型,并不会返回数据内容,我现在做的是先用group拿到数据类型,再根据类型分别去查表,返回数据后再合并……感觉好麻烦……

    res.data = []

    let list = await db.collection('goods-list').aggregate().group({

    _id: {

    tag: '$tag',

    tagName: '$tagName'


            }  
    }).end()
    for (const item of list.data) {
    let tagKey = item._id.tag
    let tagName = item._id.tagName
    let resTagList = await db.collection('goods-list').aggregate().match({
    tag: tagKey
    }).end()
    resTagList.tag = tagKey
    resTagList.tagName = tagName
    res.data.push(resTagList)
    }

    2021-08-29 15:27

  • DCloud_uniCloud_WYQ

    回复 lazybone2021: 你这是实现什么需求?商品标签?如果每次都需要做这样的查询,商品数量多了之后你会查不出来的

    2021-08-30 11:21

  • lazybone2021 (作者)

    回复 DCloud_uniCloud_WYQ: 因为我这个商品列表有上限,最多就100个,所以想只查询一次,然后对结果分类展示,没有打算按分类,分别进行多次请求得到结果

    2021-08-30 15:33

  • DCloud_uniCloud_WYQ

    回复 lazybone2021: 那可以group之后再用lookup

    2021-08-31 11:28

  • DCloud_uniCloud_WYQ

    你这两个不是同一个表吗?如果就100个商品直接全查出来在云函数里面操作就行了

    2021-08-31 11:29

该问题目前已经被锁定, 无法添加新回复