- lookup联表查询,需要分页查询时,如何用简洁的代码获取文档总数count?
在分页查询中,一般是需要返回符合条件的文档总数的,下面的代码是先获取文档总数count,然后获取0-20条数据。这两部分的代码高度重复,如果查询条件复杂的话,更是十分冗长。 // 文档总数量count读取 let queryCount = db.collection('cats-order').aggregate() .match(orderMatch) .project({ shopId: true, customerId: true, status: true, services: true, createTime: true, }) .lookup({ from: 'cats-shop', let : { shopId: '$shopId' }, pipeline: $.pipeline() .match(_.expr($.and([ $.eq(['$_id', '$$shopId']) ]))) .project({ _id: false, shopTitle: '$title' }) .done(), as: 'shops' }) .replaceRoot({ newRoot: $.mergeObjects([$.arrayElemAt(['$shops', 0]), '$$ROOT']) }) .project({ shops: false }) .lookup({ from: 'cats-customer', let: { customerId: '$customerId' }, pipeline: $.pipeline() .match(_.expr($.and([ $.eq(['$_id', '$$customerId']) ]))).project({ _id: false, customerTitle: '$title', customerPhone: '$phone', customerLevel: '$level' }).done(), as: 'customers' }) .replaceRoot({ newRoot: $.mergeObjects([$.arrayElemAt(['$customers', 0]), '$$ROOT']) }) .project({ customers: false }) if (searchWord) { queryCount = queryCount.match(_.or([{ customerTitle: new RegExp(searchWord, 'i') }, { customerPhone: new RegExp(searchWord, 'i') }])) } let countRes = await queryCount.count('total').end() pager.Total = countRes.list[0].total // 分页数据读取 let queryList = db.collection('cats-order').aggregate() .match(orderMatch) .project({ shopId: true, customerId: true, status: true, services: true, createTime: true, }) .lookup({ from: 'cats-department', let : { shopId: '$shopId' }, pipeline: $.pipeline() .match(_.expr($.and([ $.eq(['$_id', '$$shopId']) ]))) .project({ _id: false, shopTitle: '$title' }) .done(), as: 'shops' }) .replaceRoot({ newRoot: $.mergeObjects([$.arrayElemAt(['$shops', 0]), '$$ROOT']) }) .project({ shops: false }) .lookup({ from: 'cats-customer', let: { customerId: '$customerId' }, pipeline: $.pipeline() .match(_.expr($.and([ $.eq(['$_id', '$$customerId']) ]))).project({ _id: false, customerTitle: '$title', customerPhone: '$phone', customerLevel: '$level' }).done(), as: 'customers' }) .replaceRoot({ newRoot: $.mergeObjects([$.arrayElemAt(['$customers', 0]), '$$ROOT']) }) .project({ customers: false }) if (searchWord) { queryList = queryList.match(_.or([{ customerTitle: new RegExp(searchWord, 'i') }, { customerPhone: new RegExp(searchWord, 'i') }])) } let listRes = await queryList.sort({createTime: -1}).skip(pager.Offset).limit(pager.Limit).end() return { data: listRes.list, pager, // 返回{ data, pager: {Offset, Limit, Total }}这样的数据结构,是为了和云数据库的http读取方式统一 errMsg: 'collection.aggregate:ok' }
2021-06-29 - wx.uploadFile上传失败?
wx.uploadFile上传视频,经常碰到上传失败: "error":{"errMsg":"uploadFile:fail Write error: ssl=0x72b0093688: I/O error during system call, Software caused connection abort"} 或者 "error":{"errMsg":"uploadFile:fail Read error: ssl=0x6efbcc7d88: I/O error during system call, Software caused connection abort"} 这个问题原因是什么?有什么办法可以解决吗?
2020-11-20 - 不知道使用云函数 和 js里面啥区别 ?
更新数据库集合里面数据,现在想问下 使用云函数 和 不使用云函数有啥区别?云函数是不是运行时候增加内存?
2020-06-01 - 关于video标签设置封面poster一闪而过的坑爹问题
个人做法是直接删除了controls属性,虽然在开发者工具上展现有误,但是在真机上测试无误,个人经历,仅作参考,折磨了两个钟头,痛苦。
2018-08-29 - video title样式能修改吗
- 当前 Bug 的表现(可附上截图) - 预期表现 - 复现路径 - 提供一个最简复现 Demo video title里的文字如果过长,不能换行,样式也不能修改 [图片]
2019-07-04 - 如何使用数据库聚合match过滤$.and
我需要在云函数中查询数据库,聚合计算一个人的某月1-31号的消费金额: [代码]let queryFeeSum = await db[代码][代码] [代码][代码].collection([代码][代码]'lunch'[代码][代码])[代码][代码] [代码][代码].aggregate()[代码][代码] [代码][代码].match({[代码][代码] [代码][代码]eno: eno,[代码][代码] [代码][代码]date: $.and([$.gte([[代码][代码]'$date'[代码][代码], dateNumRange.begin]), $.lte([[代码][代码]'$date'[代码][代码], dateNumRange.end])])[代码][代码] [代码][代码]})[代码][代码] [代码][代码].group({[代码][代码] [代码][代码]_id: [代码][代码]null[代码][代码],[代码][代码] [代码][代码]fee: $.sum([代码][代码]'$goodsPrice'[代码][代码])[代码][代码] [代码][代码]})[代码][代码] [代码][代码].end()[代码]date是数值型:它的值是8位整数,如20190701、20190728 上面的 $.and 语句按文档中的写法,聚合这个功能也是官方开发出来不久,找不到相关帮助文档。 运行报错,查看日志提示: {"errorCode":1,"errorMessage":"user code exception caught","stackTrace":"errCode: -502001 database request fail | errMsg: [FailedOperation] (BadValue) unknown operator: $and; "} 请问一下,为什么提示操作失败,无效的值、未知的操作器$and。
2019-07-28 - 开发者培训班介绍的小程序新能力,大家怎么“玩”?
9月3日,在北京正式举办的“微信开发者培训班·小程序专场”介绍了今年推出的多项小程序能力。 小程序服务搜索能力,可以让用户高效快速的直达需求页面,更好的发现小程序中的服务。 增底层绘图标准WebGL、新的Canvas 2D接口、即将开放的帧数据接口能力以及官方WeUI2.0组件库等基础能力和拓展能力,可以在小程序上实现增强图像、实时图像识别、实时美妆等功能。 云开发方面,实时数据库、云调用及第三方平台支持等能力可以让小程序在直播、快讯、游戏等方面的云能力潜力有着更大幅度的提升。 如此丰富又好用的小程序技术能力,在大家的产品上是怎么“玩”起来的?
2019-09-03 - 小程序云开发调取数据库写在云函数中和js中哪个效率高速度快
rt,独立后台响应快还是云数据库快,测试过的给解答下。
2019-01-17 - 云开发切换开发环境和生产环境
请问,云开发切换开发环境和正式环境,是在前端app.js里写明env,还是在每一个云函数里写明env?
2019-06-24 - 云开发应该怎么切换正式和测试环境
- 我现在云函数里面已经指定了正式的数据库环境,因为要上线了,肯定要改。。。 [图片] 但是我上线了之后,我在平时的开发中,要怎么切换到测试环境的云开发数据库啊!!! 我总不可能全部改成dev环境的数据库,然后部署上去,这样的话线上就炸了啊!????? - 希望提供的能力 请问现在有方法可以切换云开发的正式和测试环境的数据库吗????? 不然我现在每次调试就会往正式的云数据库插入脏数据,这很难受啊··· 拜托各位开发者看看,谢谢了。 ================================================================= 我看下面有一位评论说云函数不要指定,但是我试了还是不行,我先把截图放上来 云函数 [图片] 往云数据库插入一条数据 然后两个环境的云函数列表,都确认已经部署上去了 [图片] [图片] 在app.js里面初始化 [图片] 最后我点击自定义按钮触发云函数的时候,全部数据只在dev环境产生,在release根本没有。 [图片] [图片]
2019-06-04