- 云函数已设置环境变量TZ查询的数据date仍然时区不对?
函数打印的数据结果:[图片] -------------------------------------- 控制台直接查看数据:[图片] ----------------------------------- 云函数配置:[图片] ------------------------------- 所以这是一个BUG吗?但奇怪的是我插入数据的云函数貌似date可以通过环境变量,正确的插入date。 好像通过云函数读取数据库的date时,时区的环境变量无效? 我目前临时解决方案是在project中写 updateDate: $.dateToString({ date: '$updateDate', format: '%Y-%m-%d %H:%M:%S', timezone: 'Asia/Shanghai' }) ... 至少这样,在以后环境变量时区问题调整以后,对业务内容不会有影响吧? 另外我发现,我是HTTPAPI调接口,直接query写语句返回的是$date类型,没问题,但通过API调用云函数,返回的就不是$date了,然后就出现这个时区问题了。然后我只能在函数中用dateToString.
2021-02-21 - 已恢复-腾讯督促我早休息,哈哈,ide云端开发环境爆了?
[图片] 2021-02-04 03:22 正“美滋滋”的云端测试云函数,然后就无限出错,重启IDE后才发现,原来不是我的原因。。。 好滴吧,睡了,早休息。 已恢复,还挺快,那再调试一会再睡吧~
2021-02-04 - 云函数中如何清空数组中的数组?
已解决 我又陷入了尴尬的问题… 首先我承认我的数据结构有问题,只是在过程中遇到了这个问题,想知道如何满足我的需求目标。 数据结构: { "gid":"123", "yinfo": {"yid":['a','b'],"zid":"001"}, {"yid":['x','y'],"zid":"002"} } 需求目标: 清空gid:_in([123,456,789])数据的yinfo下所有的yid为[] 尝试过程: 我尝试过set,但没办法获取原来的zid再set回去。 也尝试了elemMatch,如果where里elemMatch了,只能重置第一条的yid,因为elemMatch的特性决定。。。 然后我试了yinfo.$.yid,然后pull,但总是提示“The positional operator did not find the match needed from the query”… 然后我觉得是不是,又是有什么我没有想到? 所以,麻烦问下各位朋友,该如何做? 感谢。 --------------------- 貌似只能: 1.查询数据-> 2.存储并调整集合-> 3.更新已调整的数据 分三步进行处理了
2021-01-27 - 云函数中如何根据a字段[number]大于等于(当前日期-b字段[更新日期])更新c字段?
已解决 数据举例: { showDay:3, updateDate:Tue Jan 19 2021 08:00:01 GMT+0800 (中国标准时间) flag:1 } 需求: showDay 大于等于 (现在时间减去updateDate除以86400000)的数据,flag更新为0。 问题: .where中使用$.divide([($.subtract([currentTime, '$updateDate'])),86400000])无效。 代码: .where({ showDay:_.gte($.divide([($.subtract([currentTime,'$updateDate'])),86400000])) }) 是因为$.是在聚合阶段使用的原因吗? 但如果.aggregate()后如何update呢? 试了很久都没有成功,特来求助。 感谢各位。 ---------------------------- 有时候思路会陷入自己的预设,不能break。 为什么一定要在aggregate以后update呢?它本身就不是update的前置条件呀。 所以一定是在update之前筛选出数据,而不是聚合数据。 所以,如下: .where( _.expr( $.eq(["$goodsFlag","1"]), $.gte([("$showDay"),($.divide([($.subtract([currentTime,'$updateDate'])),86400000]))]) ) )
2021-01-26 - 调用CloudPay.refund()云函数申退款是否需要functionName?以及如何传递参?
申请退款 CloudPay.refund()官方文档的说明中,对一些参数写明必填 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/open/pay/CloudPay.refund.html [图片] 尝试按文档内容进行退款相关的操作,退款的确成功了。 但是通过functionName回调的函数中,没有办法收到自定义参数,所以回调中无法处理相关业务。 因为统一支付的文档中有明确的写明“attach”参数作为附加说明,且回调可以传递该参数。 所以,我的问题: 一、退款的时候是否也需要一个类似“attach”的参数作为附加说明传递使用呢? 二、还是退款时,根本不需要functionName这样来回调? 三、如果还有其他支持类似functionName这种参数形式进行回调的函数,它们之间是否有一个通用传递值的方法或参数可以使用? 感谢。 另外,退款是否有参数可以控制需要商户号审核?目前是无需审核,直接秒退。。。审核业务要自己定义吗?能否通过某些参数,使用商户号的规则来审核? 感激不尽。
2021-01-25 - 小程序调用云支付退款的官方文档更新不?
退款接口:CloudPay.refund()官方文档缺少代码示例。。。 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/open/pay/CloudPay.refund.html 以及使用云支付时,哪些是必填,哪些不是必须的,官方文档貌似没有针对以前API调用时的差异做更新吧? 所以,可不可以反馈一下,更新一下“微信支付”-“申请退款”的文档,加上示例代码,以及正确的说明。 感谢。
2021-01-24 - lookup后包含的数组的length如何获取?
[图片] goods表lookup了tuanList表,我想做的是,在云函数的lookup最后,通过project,自定义一个属性,比如ktFlag:tuanList.length==0的这样一个属性,就是当tuanList有值时,自定义属性ktFlag:true,没值就flase。 我尝试了好多想法,都没成功,也许是我用的不对,如下: ktFlag:$.eq(['$tuanList'.length,0]) length结果是前面字符串的。。。 ktFlag:$.eq([$tuanList.length,0]) 报错 ktFlag:$.eq([tuanList.length,0]) 报错 所以我该怎么在最后的project中,判断被包含数组的长度呢? 我知道可以拿查询结果写JS循环判断,然后重新装填集合,但我想知道在project中,如何判断某个字段,或者某个被包含属性为数组的length,谢谢大家。
2020-12-24 - type=“number”第三方键盘失效这事就这么着了?
type="number"对IOS系统不可控能理解,我们自己写正则判断去呗。 但问题是官方直接出个虚拟数字键盘不好吗? 还能解决在数字键盘没有完成键的尴尬。 官方开发都太忙了。 不过这也的确不算bug。 列为还是自己找插件去得了。 遇到第三方键盘能开心的在数字里打汉字、字母、符号、表情这个问题的伙伴们。 您呐,要么自己写正则去,要么自己做数字键盘插件去吧。 官方文档就从没好好更新过,它number不灵,好赖在文档中备注一下啊。
2020-12-22 - lookup联查如何不返回右表为空的主表数据?
let openid=cloud.getWXContext().OPENID const db = cloud.database() const $ = db.command.aggregate const _ = db.command return await db.collection('goods_list').aggregate() .match({ goodsFlag:'1' }) .lookup({ from: 'tuan_list', let: { goods_id:'$_id' }, pipeline: $.pipeline() .match(_.expr($.and([ $.eq(['$tuanZhangOpenId',openid]), $.neq(['$goodsId','$$goods_id']) ]))) .project({ _id:0, goodsList:$.eq(['$goodsList'.length,0]), tuanZhangOpenId:1, goodsId:1 }) .done(), as: 'goodsList', }) .end() .then(res => res) .catch(err => res) 数据结构: goods_list(只有两条数据) [图片] [图片] tuan_list(只有一条数据) [图片] =========================== 返回结果: [图片] 疑问: 在我的pipeline的match中,条件控制项,ID要求不相等的这个$.neq(['$goodsId','$$goods_id'])未起到作用吗? 还是说理论上子表的条件不优先? 需求结果: result只返回goodsList有值的结果,即“牛肉”的那条数据。 PS:除了在then里写JS循环判断再重新push后return这种方式,可不可以在match里或其他项上做条件控制? 感谢。 - 如果我用sql写的话,思路是下面这样: SELECT a.* from a left join b on b.aid!=a.id where a.goodsFlag=1 and b.aid is not null 在微信云开发中,第一个match的条件,是先执行再lookup,还是先lookup再执行第一个match? 如果我想判断goodsList数组的长度,我尝试过在第一个match里追加goodsList:$.eq(['$goodsList'.length,0]),但失败了。 所以是不是第一个match要先于lookup呢? 我在lookup之后match去判断数组长度,好像也没起到作用。 - 另外,如果lookup的左外联性质,无法改变,它不能像sql一样在最外集合追加where 子表 is not null的话,我想我可能要改变表结构了。 那么,如果我使用文档型数据库的话,单条数据的goodsList字段[],存放过多的集合,会不会对查询造成压力。 比如: {goodsName:测试商品, goodsPrice:10.00, tuanList[1,2,3,4,5……10000]} 当我去筛选某些值 in tuanList的时候,效率高吗? 不太了解云开发的数据库效率。 在云开发数据库中,是不是更倾向于文档型结构?传统的关系型结构,反而会带来麻烦和效率问题呢?
2020-12-17 - lookup不可以在小程序端使用,所以我必须要用云函数对吗?
各位伙伴,最近一周接触小程序开发,前期JAVA开发经验,可能问了一个在各位看来比较low的问题。。。 就是,我在学习云开发过程中,需要做数据库表联查且多条件,在对照官方文档的demo,我写在了小程序端的JS里。 解决了各种奇怪的问题之后,比如: $.pipeline() is not a function ,我写const $ = db.command.aggregate; _ is not defined,我写 const _ = db.command; 直到最后,Error: errCode: -502003 database permission denied | errMsg: Permission denied; 我去开放了云数据库需要表的权限。 依然502003。 然后我就查开放社区,最后我觉得,是不是我一开始就走偏了。。。 是不是lookup目前只支持在云函数中? 小程序中只能做单表查询? 所以,最终我想问的是:我只要是需要用lookup,pipeline,就只能用云函数来做,且必然需要消耗更多的云函数。 因为在我搜索之前其他伙伴遇到类似问题的时候,有一位伙伴提到lookup需要消耗20云函数。 感谢各位。
2020-12-16