小程序云开发联表查询

问题

我现在有两个集合,一个是category(类别),一个是site(地点),而一个类别下有很多个地点

那如果我要查出某个类别下有哪些类别怎么办?

解决方式

官方给出的方法是 聚合查询lookup函数 联表查询官方文档

我这里用 lookup函数 来进行联表查询 lookup函数官方文档

官方给出两种方法

  • 相等匹配 就是两张集合里的两个字段的内容相同,进行匹配
  • 自定义连接条件、拼接子查询 如果有这方面要求的可以自己研究

这里使用相等匹配

当然如果看的一脸懵也没事,直接看我的例子

我的集合结构如下

集合说明

类别集合有c_i(类别编号)字段,地点集合有c_id(当前地点所属类别编号)字段。

既然两张集合有可以做连接的字段(两个集合中用作连接的字段名称不一定要相同,我只是为了方便写成一样的了

那就可以用 lookup函数 来实现联表查询

代码说明

const db = cloud.database()
const _ = db.command
const $ = _.aggregate
// 云函数入口函数
exports.main = async (event, context) => {
    return await db.collection('category').aggregate()
        .lookup({
            from: 'site',
            localField: 'c_id',
            foreignField: 'c_id',
            as: 'site_list',
        })
        .end()
}

但我写的代码是啥意思呢?

db.collection('category').aggregate()
这行应该很好理解,就是对类别集合进行聚合操作(aggregate是聚合,lookup就是aggregate的一个方法)

lookup({})
就是调用这个函数,那里面的四个参数又是啥意思呢?

            from: 'site',
            localField: 'c_id',
            foreignField: 'c_id',
            as: 'site_list',
from的参数可以理解为**另一个集合**   连接的那个集合(地点集合)(我要查类别下的地点,当然是和地点集合做连接啦,所以是site)

localField的参数可以理解为**当前集合的外键**   当前集合(类别集合)进行连接的字段(c_id),就是类别集合里的c_id字段啦

foreignField的参数可以理解为**另一个集合的外键**   连接的那个集合(地点集合)进行连接的字段(c_id),就是地点集合里的c_id字段啦

as的参数可以理解为**结果数组名称**   结果作为一个数组形式输出,那个数组的名字(这里就是把那个输出结果的数组命名为site_list了)

最后把返回来的结果中的site_list取出来用就行啦

当然这样的话是把每一个类别下的地点都分别查出来了

条件查询

那如果我只要查指定一个类别下的地点怎么办呢

需要加一个where条件,在lookup后面不能直接跟where,需要用match来代替。改进一下上面的代码

比如我只想查图书馆类别下的所有地点(当然你也可以传参进来)

const db = cloud.database()
const _ = db.command
const $ = _.aggregate

// 云函数入口函数
exports.main = async (event, context) => {
    return await db.collection('category').aggregate()
        .lookup({
            from: 'site',
            localField: 'c_id',
            foreignField: 'c_id',
            as: 'site_list',
        })
        .match({
            name: "图书馆"
        })
        .end()
}

结果就只有图书馆类别下的地点啦

CSDN 喵宁一 小程序云开发联表数据查询以及云函数中的应用

posted @   奇妙方程式  阅读(425)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示