- # 使用小程序云开发API更新数组中的单个数组元素
使用小程序云开发API更新数组中的单个数组元素 看了看mongoDB的更新数据方式,找到了解决办法,解决方法如下,亲测可用: 第一种方法:使用位置操作符$ [代码]代码,条件更新写在云函数中 [代码] [图片] [代码]test_api集合原始数据如下 [代码] [图片] [代码]在云函数中执行1中的代码,数组users中id为1001的用户添加了一个新的属性test [代码] [图片] [代码]原理分析 [代码] where条件是查找数组中id属性为1001的用户 update中的使用’users.$.test’: ‘test’ 注意里面的$符号,在mongoDB中,这个符号叫做位置操作符,代表数组的下标,如下引自《mongoDB实战》 [图片] 第二种方法:直接使用数组下标 云函数代码 [图片] test_api集合原始数据如下 [图片] 代码执行后 [图片] 相对于第一种方法,这种方法更加简单,只不过users.1.test这种写法有点颠覆js和java中的属性书写规则,让人感觉怪怪的,在mongoDB中,也支持点数字这种写法。 一个可能的疑惑 可不可以写作’users[1].test’:‘test’,测试结果如下: [图片] [图片] 可以看到’user[1]'无法被识别为数组的第二个元素,而是作为了属性名新增了一个属性,结论:必须写成”点数字“不能写成“中括号” 结论: 经过测试,使用这两种种方法可以更新数组中的一个元素。 方法一适合在不知道数组元素下标的情况下根据查询条件更新元素; 方法二适合在知道数组元素下标的情况下更新元素; 当然也存在既知道元素下标也可以通过属性查到的情况,想用哪个就看心情了-.- 但是暂未找到查询返回数组中的一个元素的方法,再探索探索吧 ——。——
2019-03-06 - #小程序云开发挑战赛#-流量计设备性能测试平台-北京素水
一、产品背景 1.应用场景 2020年9月1日,我国自然资源税开始实施,其中对地热水(从深部地层抽取出来的热水,例如:温泉)要进行按量征税。 地热水的开采量和回灌量均会被纳入到征税依据。而这些数据,来自于现场的电子流量计,通过物联网设备采集后,上传到云。 河北省要求地热水的回灌量不得低于95%。为了监控企业的实时回灌情况和阶段回灌比例,北京素水受地方政府部门委托,对地热企业进行监测。 流量计设备的性能对企业交税、政府监管起着举足轻重的作用。 为了测试流量计的数据准确性和稳定性,北京素水组织实施了一个实验场地,在一条管道上安装2台流量计,测试其数据的吻合性、准确性和稳定性。 [图片] 本次开发的小程序,将用于查看实时数据和历史数据,供判断流量计性能。 2.目标用户 当前,本小程序用户仅为本公司、流量计厂家和地热公司。 测试结束后,流量计设备将被实际安装到地热井口。相关的监测技术、数据分析功能、小程序将转型为生产工具。届时,目标用户为: 地方政府部门:可用小程序随时查看地热企业的开采情况;地热企业:根据小程序里的历史曲线,发现设备异常问题,及时进行维护;科研单位:根据开采量和回灌量数据,分析区域地热资源能力,制定保护性开采方案。[图片] 二、技术部分 1.实现思路 现场的电子流量计产生的数据,可以通过物联网技术传输到腾讯云物联网平台,再利用规则引擎将数据流入云开发,即可与小程序对接,实现人机界面,用于评估流量计的性能评估。 2.架构图 现场的电子流量计输出的Modbus 485数据,包含瞬时流量、正向累计流量和反向累计流量;利用物联网网关设备,读取电子流量计数据,定时上传到腾讯云物联网通讯平台;在腾讯云物联网通讯中,配置规则,将数据流入到云开发的云函数中;云函数对数据进行解析,存储到云数据库中;定时云函数对已经存储的数据进行周期性计算和整理,生成周期数据;小程序显示动态数据和历史曲线,实现对目标流量计性能的测试评估。[图片] 3.效果截图 本小程序仅为测试设备,界面非常简洁,仅为一页: [图片] 当前为了测试软件,创建了定时云函数,每分钟生成一组模拟监测数据。待试验场地内的管道焊接完毕后,将暂停模拟数据,接入真实流量计,将数据传输到云开发,在小程序上显示,实现设备性能评估。 4.功能代码展示 代码已开源,地址:https://gitee.com/rd2pk/waterOnline_minaChanllage2020 本产品主要的技术亮点不在小程序和云开发部分,而是在腾讯云物联网通讯部分。 腾讯云物联网通讯接收了现场设备上传的topic数据后,利用规则引擎将数据直接交接给云开发下的云函数: [图片] 非常轻松即可实现数据流转,替代了传统技术需要部署工业软件和实体机房的环节(节省20w+)。 云函数接收数据并存储数据的核心代码为: var theData = { wellName: e.devicename == 'liuzhuangHuiguan' ? '刘庄回灌井' : '刘庄开采井', // wellType: ts: e.timestamp, time: tsToDateStr(e.timestamp), rightAccuFlow: e.payload.data.rightAccuFlow, leftAccuFlow: e.payload.data.leftAccuFlow, nowFlow: e.payload.data.nowFlow, } if (theData.wellName.indexOf('开采井') > -1) { theData.wellType = '开采井'; } else { theData.wellType = '回灌井'; } // console.log('整理后的数据格式', theData) var saveDataToDb = await db.collection('nowData').add({ data: theData }) 5.作品体验二维码(如已上线) [图片] 三、团队简介 [图片] 团队负责人:王建存 毕业于中国地质大学(北京),曾任职河北地质环境监测院、中石化新星石公司,当前为北京素水公司总经理。 地质+信息+地图+工业的多面手,具有多年地热监测工作经验,一直在学习新技术,提升产品稳定性。 [图片] 软件工程师:赵子坤 不仅身高超过1米8,体重还能超过200的腼腆码农。在小程序方面还是个新手。起步早、站队好,成长迅速。世界终将是新人的。 [图片] 数据采集箱:数据的搬运工,腾讯云物联网技术 inside。
2020-09-20 - geoNear无法使用count()
- 当前 Bug 的表现(可附上截图) - 预期表现 - 复现路径 - 提供一个最简复现 Demo [代码]db.collection([代码][代码]'user_address'[代码][代码])[代码] [代码].where({[代码] [代码]location: _.geoNear({[代码] [代码]geometry: user_location[0].location,[代码] [代码]minDistance: 0,[代码] [代码]maxDistance: 5000[代码] [代码]})[代码] [代码]})[代码] [代码].count({[代码] [代码]success: [代码][代码]function[代码] [代码](res) {[代码] [代码]console.debug([代码][代码]"db.collection('user_address')"[代码][代码], res)[代码] [代码]},[代码] [代码]fail:err=>{[代码] [代码]console.debug([代码][代码]"db.collection('user_address')"[代码][代码], err)[代码] [代码]}[代码] [代码]})[代码]如上代码,运行后返回错误: db.collection('user_address') Error: errCode: -502001 database request fail | errMsg: [FailedOperation.Query] (BadValue) $geoNear, $near, and $nearSphere are not allowed in this context 求解使用geoNear查询附近的点如何过去查询结果的总条数,如果不支持count,应该如何获得总的记录条数?
2019-06-16 - 小程序能否保存文件并且发送到微信聊天中
- 需求的场景描述(希望解决的问题) 需求重点是希望能把原始文件用小程序保存后,通过微信发送给用户 fileSystemMange无法满足条件,10m的限制太小了,项目中很多PDF都是大于10M的大小的,所以saveFile这个方式适用范围太小了。 安卓手机勉强有替代方案,openfile的时候自带的文件阅览器可以把文件保存到本机然后用户再直接转发文件 但是IOS端预览文件的时候并没有这个选项,所以在ios端难以找到合适的替代操作 通过分享的方式勉强只能做到让用户预览文件,但是无法让用户获取原始文件 - 希望提供的能力 所以小程序能否提供下载文件到本地的功能?并且能放宽文件大小 或者有没有其他解决方案。 暂时的解决方案是通过邮件发送附件,但是最优解还是希望能通过小程序直接获取附件并且能在微信中发送原始文件。
2019-01-19