小程序云开发:联表查询去重及排序的不严谨笨办法

摘要:
问题描述:1、数据库查询去重,云开发没有distinct2、数据库排序,联表查询用aggregate的情况下,不能用orderby()3、lookup()情况下,如何取用as中嵌套的字段4.联表中两个表中有字段名相同('_openid'),且需要对其中一个添加match限制问题解决:1、用group()代替distinct2、转用aggregate下的方法sort(),且应在project()中写

问题描述:

1、数据库查询去重,云开发没有distinct

2、数据库排序,联表查询用aggregate的情况下,不能用orderby()

3、lookup()情况下,如何取用as中嵌套的字段

4. 联表中两个表中有字段名相同('_openid'),且需要对其中一个添加match限制

问题解决:

1、用group()代替distinct

2、转用aggregate下的方法sort(),且应在project()中写相应设置,否则sort()会失效

3、摸索出来的,貌似没找到小程序文档里这么用的,能跑就大吉大利了

4、db.collection('表名')中对应哪个表,match中相应字段就指的是该表中的字段,不需要额外加条件区分

示例:

基本情况:联表查询两个表,forum表中 '_id' 字段对应f-reply表中 'forum_id' 字段,一条forum表的记录对应多条f-reply表的记录

需求:查出f-reply表中特定'openid'对应forum表中的'_id','title'等字段

两表的内容:

小程序云开发:联表查询去重及排序的不严谨笨办法第1张小程序云开发:联表查询去重及排序的不严谨笨办法第2张

代码:

constdb=cloud.database({
env:"........"
})
const$=db.command.aggregate
db.collection('f-reply').aggregate().lookup({
    from: "forum",
    localField:"forum_id",
    foreignField:"_id",
    as:"forum_info"}).match({
//此处_openid是f-reply表字段 _openid:event.openid }).project({ forum_id:
1, forum_info:1, sendtime:1 //后面sort要用的字段,必须要在project中写明,否则排序失效}).group({ _id:'$forum_id',//这里必须设置一个'_id',作为group中合并的列名 title:$.first('$forum_info.title'), replynum:$.first('$forum_info.replynum'),//粗暴解决,重复的title值都相同,所以直接取第一个 forumImg:$.first('$forum_info.forumImg') }).sort({ sendtime:-1}).end()

查询结果:

小程序云开发:联表查询去重及排序的不严谨笨办法第3张

参考资料:

去重:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/aggregation/aggregation.html

字段重名:https://developers.weixin.qq.com/community/develop/doc/0004a67ebc4ff8e4da9ae9a8056c00

总结:本文可能存在误导,总之,不要靠近云开发...

免责声明:文章转载自《小程序云开发:联表查询去重及排序的不严谨笨办法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇阿里云ali-oss图片增加水印【深度学习系列】用Tensorflow实现经典CNN网络Vgg下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Doris 实战 踏雪扬尘

目录 概述 安装 简单使用导入数据 高级使用 数据模型、ROLLUP 及前缀索引 Aggregate 模型 保留明细数据 Uniq 模型 Duplicate 模型 ROLLUP 前缀索引与 ROLLUP ROLLUP 的几点说明 聚合模型的局限性 数据模型的选择建议 数据划分数据划分 概述 安装 FE URL地址如下:http:...

mongodb聚合的使用

聚合: 主要用于计算和统计等,类似sql种的sum() avg() db.集合.aggregate( { 管道:{表达式} } ) 常用的管道: $group:将集合中的文档按照字段进行分组 $match:过滤数据,输出符合条件的文档 $project:修改文档的结构,重命名、增加、删除字段,创建...

cacti 流量图合并

cacti 安装:https://www.cnblogs.com/weijie0717/p/4072711.html 一、需求介绍   由于交换机的多端口跑同一种流量,需要汇总统计。因此需要见多个端口的流量图叠加汇总到一个流量图中展示。此实验以公网上联端口为例:T1/1/23 和 Te1/1/24. 二、环境   cacti版本:0.8.8f   系统:c...

MongoDB聚合(Aggregation Pipeline基础篇上

学习MongoDB 十一: MongoDB聚合(Aggregation Pipeline基础篇上)(三) 2016年06月09日 10:47:10 阅读数:15320 一、Aggregate简介 db.collection.aggregate()是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个...

MongoDB 高级查询_aggregate聚合管道

MongoDB 聚合管道(AggregationPipeline) 使用聚合管道可以对集合中的文档进行变换和组合。实际项目应用主要是表关联查询、数据的统计。 MongoDB 中使用 db.COLLECTION_NAME.aggregate([{<stage>},...]) 方法 来构建和使用聚合管道。下面是官网给的实例,感受一下聚合管道的用法。...

MongoDB 聚合查询

什么是 MongoDB 聚合框架 MongoDB 聚合框架(Aggregation Framework)是一个计算框架,它可以: 作用在一个或几个集合上; 对集合中的数据进行的一系列运算; 将这些数据转化为期望的形式; 从效果而言,聚合框架相当于 SQL 查询中的: GROUP BY LEFT OUTER JOIN AS等 管道(Pipel...