还是没有看懂如何获取item里面的指定的一条数据,能多指教一下吗
云数据库聚合(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}[代码]
2021-06-08解决了吗?怎么弄的解决的
云数据库聚合(aggregate) 如何筛选对象数组里的字段?给一个参数,如只匹配小李,匹配结果只显示小李一行数据? 返回结果: {"name":"小李","t":3.0,"a":5.0,"b":3.0} { "_id":"f885cb35511ad18d0cc3aed45dc42e87", "age":1, "items": [ {"name":"小王","t":2.0,"a":4.0,"b":3.0}, {"name":"小李","t":3.0,"a":5.0,"b":3.0} ] }
2021-06-08