H5W3
当前位置:H5W3 > uniapp技术问答专区 > 正文

uniapp云数据库问题

有一个blog表,然后根据它的分类id查找出多条记录,然后要到blogvote表查根据这个id有多少条点赞数量,和查询当前用户有没有点赞,这种该怎么写。。我是先查出来记录。然后for循环里补上每条的点赞数量和是否点赞,这个耗时2512ms。。太久了,
博客表包含了一个cate_id,贴上blogvote表
我看文档,关联表用lookup。但是没法加条件,如果用addFields,又不知道怎么继承当前查询的blog_id,还有一个就是查询数量的,好像也只能用addFields


·回复

有多少条点赞数量,和查询当前用户有没有点赞 这两个你要放到一步里面完成?


·回复

你的意思是在做一个blog列表之类的东西是吗?一次返回多个blog,并且要在这多个blog内添加点赞数量和用户是否点赞是吗?如果是的话可以参考下面的示例:

db_init.json

{  
  "blog": {  
    "data": [{  
        "_id": "blog-1",  
        "content": "11111111"  
      },  
      {  
        "_id": "blog-2",  
        "content": "22222222"  
      },  
      {  
        "_id": "blog-3",  
        "content": "33333333"  
      }  
    ]  
  },  
  "zan": {  
    "data": [  
      {  
        "_id": "zan-1",  
        "blogId": "blog-1",  
        "userId": "user-1"  
      },  
      {  
        "_id": "zan-2",  
        "blogId": "blog-2",  
        "userId": "user-2"  
      },  
      {  
        "_id": "zan-3",  
        "blogId": "blog-1",  
        "userId": "user-2"  
      }  
    ]  
  },  
  "user": {  
    "data": [  
      {  
        "_id": "user-1",  
        "name": "user-name-1"  
      },  
      {  
        "_id": "user-2",  
        "name": "user-name-2"  
      }  
    ]  
  }  
}

云函数代码

'use strict';  
const db = uniCloud.database()  
exports.main = async () => {  
  let userId = 'user-1'  
  const $ = db.command.aggregate  
  let res = await db.collection('blog').aggregate().lookup({  
    localField: '_id',  
    foreignField: 'blogId',  
    from: 'zan',  
    as: 'zanList'  
  }).addFields({  
    zanCount: $.size('$zanList'),  
    zaned: $.anyElementTrue([$.map({  
      input: '$zanList',  
      as: 'zanItem',  
      in: $.eq(['$$zanItem.userId', userId])  
    })])  
  }).project({  
    zanList: 0  
  }).end()  
  return res  
};

本文地址:H5W3 » uniapp云数据库问题