- 云数据库聚合(aggregate)时如何操作数组型字段的查询与分组?
[代码]{[代码][代码] [代码][代码]"_id"[代码][代码]:[代码][代码]"f885cb355d9ad18d0cc3aed45dc42e87"[代码][代码],[代码][代码] [代码][代码]"status"[代码][代码]:0,[代码][代码] [代码][代码]"items"[代码][代码]:[代码][代码] [代码][代码][[代码][代码] [代码][代码]{[代码][代码]"pId"[代码][代码]:[代码][代码]"075734515d99df300c4f12df68415e50"[代码][代码],[代码][代码]"pPrice"[代码][代码]:110.0,[代码][代码]"pCost"[代码][代码]:85.0,[代码][代码]"quantity"[代码][代码]:1.0},[代码][代码] [代码][代码]{[代码][代码]"pId"[代码][代码]:[代码][代码]"392890432d99df300c4f12df68415f99"[代码][代码],[代码][代码]"pPrice"[代码][代码]:110.0,[代码][代码]"pCost"[代码][代码]:85.0,[代码][代码]"quantity"[代码][代码]:2.0}[代码][代码] [代码][代码]],[代码][代码] [代码][代码]"_openid"[代码][代码]:[代码][代码]"oVCJa5DGovfnzgKr0u2Gn5viMHug"[代码][代码]}[代码] 类似于这种典型的数据结构,items为一个对象数组型字段,相当于关系型数据库的子表数据。我业务上需要对items做一些匹配和分组查询。如下语句: [代码]const ordersRes = await db.collection([代码][代码]'orders'[代码][代码])[代码][代码] [代码][代码].aggregate()[代码][代码] [代码][代码].addFields({[代码][代码] [代码][代码]matched: $.[代码][代码]in[代码][代码]([[代码][代码]'$items.pId'[代码][代码],pIds])[代码][代码] [代码][代码]})[代码][代码] [代码][代码].match({[代码][代码] [代码][代码]sellerId: sellerId,[代码][代码] [代码][代码]status: $.neq(-1),[代码][代码] [代码][代码]matched: [代码][代码]true[代码][代码] [代码][代码]})[代码][代码] [代码][代码].group({[代码][代码] [代码][代码]_id: [代码][代码]'$items.pId'[代码][代码],[代码][代码] [代码][代码]pQuantity: $.sum([代码][代码]'$items.quantity'[代码][代码])[代码][代码] [代码][代码]})[代码][代码] [代码][代码].end()[代码] 遇到两个问题: 问题1:查询时,想针对pId进行筛选,我事先准好了一个有效的pIds数组,match有效的pId,但输出为0。而我用类似的语法,使用where可以工作,能把匹配上的记录输出。 [代码].where({[代码][代码] [代码][代码]sellerId: sellerId,[代码][代码] [代码][代码]status: _.neq(-1),[代码][代码] [代码][代码]'items.pId'[代码][代码]: _.[代码][代码]in[代码][代码](pIds)[代码][代码] [代码][代码]})[代码] 问题2,想针对pId进行分组,合计对应pId的quantity,但是并不能有效分组。实际输出的group条件是一个pId数组,也就是把items下面的多个pId抽取出来组成数组作为group条件了,并不是我所期望的单个pId进行分组,输出结果如下所示: [代码]list: Array(10)[代码][代码]0: {_id: Array(2), pQuantity: 0}[代码][代码]1: {_id: Array(2), pQuantity: 0}[代码][代码]2: {_id: Array(3), pQuantity: 0}[代码][代码]3: {_id: Array(3), pQuantity: 0}[代码][代码]4: {_id: Array(2), pQuantity: 0}[代码][代码]5: {_id: Array(2), pQuantity: 0}[代码][代码]6: {_id: Array(1), pQuantity: 0}[代码][代码]7: {_id: Array(1), pQuantity: 0}[代码][代码]8: {_id: Array(1), pQuantity: 0}[代码][代码]9: {_id: Array(1), pQuantity: 0}[代码]
2019-10-09 - 云函数云数据库日期比较怎么写?
需求很简单,把当天(国庆当天)订单所有金额合计一下,调试不出来,查阅了论坛都提到数据库聚合日期比较没法比呀: [代码]const res = await db.collection([代码][代码]'orders'[代码][代码])[代码][代码] [代码][代码].aggregate()[代码][代码] [代码][代码].addFields({[代码][代码] [代码][代码]matched: $.and([$.gt([[代码][代码]'$addTime'[代码][代码], [代码][代码]new[代码] [代码]Date([代码][代码]'10/1/2019'[代码][代码])]), $.lt([[代码][代码]'$addTime'[代码][代码], [代码][代码]new[代码] [代码]Date([代码][代码]'10/2/2019'[代码][代码])])])[代码][代码] [代码][代码]})[代码][代码] [代码][代码].match({[代码][代码] [代码][代码]sellerId: openid,[代码][代码] [代码][代码]status: $.neq(-1),[代码][代码] [代码][代码]matched: [代码][代码]true[代码][代码] [代码][代码]})[代码][代码] [代码][代码].group({[代码][代码] [代码][代码]_id: [代码][代码]null[代码][代码],[代码][代码] [代码][代码]totalFinalSum: $.sum([代码][代码]'$finalSum'[代码][代码])[代码][代码] [代码][代码]})[代码][代码] [代码][代码].end()[代码]
2019-10-01 - 物流助手支持平台小程序服务商提供给多商户使用了吗?
官方开发指南里一会儿说去小程序后台绑定快递客户编码,一会儿又提供了一个 logistics.bindAccount 接口出来。 有用过的大佬给个准信。目前可以通过以上接口绑定并服务多个商户了?
2019-09-27 - 在云开发后台数据库里想把字段复制一个出来,如代码所示,哪里写错了?
[代码]db.collection([代码][代码]'orders'[代码][代码])[代码][代码] [代码][代码].where({[代码][代码] [代码][代码]_id: [代码][代码]'3c4c6d855d695c480dde76744c1cc938'[代码][代码] [代码][代码]})[代码][代码] [代码][代码].update({[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]sellerOpenid: $_openid[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码] 提示:SymanticError: $_openid is not defined (at line 7, col 21) 正确的语法是? 开发文档哪里有说明吗?找了半天没找到,只能来请教
2019-09-17 - 云函数数据库查询,加了match方法后为什么就不work?
const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() const _ = db.command const $ = _.aggregate // 云函数入口函数 exports.main = async (event, context) => { return db.collection('orders') .aggregate() .match({ status: _.neq(-1) }) .sort({ addTime: -1 }) .end() } 请教这个数据库查询云函数,没有加match方法可以输出数据,加了match就得不到数据,哪里写的有问题?相同的写法在客户端都可以正常执行。谢谢!
2019-09-03 - db.aggregate的end()的方法介绍,API文档里怎么找不到?
从开始研究db里的Date类型数据如何在wxml中显示出来,文档里对serverDate数据库存入之后如何使用一点介绍都没有。然后翻来翻去翻到了aggregate似乎可以解决问题,于是看到所有的示例都是以end()结尾。好嘛,我在end后面再接一个get,报错,翻了论坛里的一个示例才知道怎么用。对于我这样第一次接触aggregate的,不太友好。 另外aggregate要求的基础库版本怎么这么高,我自己的微信试了下都不兼容
2019-09-03 - 如何在setData之后保持input里的用户输入内容?
- 需求的场景描述(希望解决的问题) 有一组input由data中的数组动态生成,当删除数组一项元素时,用setData更新界面,此时如果界面上用户已经在某些input 中输入了内容,这些内容会在setData之后被重置为data对应的数据,如何便捷的保持用户输入呢? 详见代码片段。
2019-07-11 - wxs中的console.log不执行
- 当前 Bug 的表现(可附上截图) 点击页面触发tap事件后console.log不输出信息,但是,我相同代码做了一个代码片段,却不会出现这个问题。 - 预期表现 点击页面触发tap事件后console.log输出信息:aaaa - 复现路径 始终 - 提供一个最简复现 Demo <!--miniprogram/pages/test/test.wxml--> <text bindtap='{{m1.a}}'>miniprogram/pages/test/test.wxml</text> <wxs module='m1'> var a = function(){ console.log('aaaa'); }; module.exports.a = a; </wxs> [图片]
2019-07-04