我现在有两个集合要联查
一个是类别(category),一个是地点(site)
一个类别下有很多个地点
那如果我要查出某个类别下有哪些类别怎么办?
联表查询官方文档
官方给出的方法是聚合查询和lookup函数
那我就用lookup函数来解决问题
lookup函数官方文档
官方给出两种方法
一种是相等匹配,就是两张集合里的两个字段的内容相同,进行匹配
一种是自定义连接条件、拼接子查询,如果有这方面要求的可以自己研究
那我用的是相等匹配
当然一脸懵也没事
直接看我的例子
一个类别下有很多个地点,查某个类别下的所有类别怎么写呢?
我的集合结构如下
(我设计的思路还是按照传统关系型数据来设计的,当然这样也没有关系)
我设计的两张集合中
类别集合有c_i字段,地点集合也有c_id字段,这个字段表示的是类别的序号,即某个地点属于哪一个类别。
既然两张集合有可以联立的字段(这两个字段名称不一定要相同,我只是为了方便写成一样的了)
那就可以用lookup来实现了
// 云函数入口函数
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的参数可以理解为 要连接的那张集合(我要查类别下的地点,当然是和地点集合做连接啦,所以是from: 'site')
localField的参数可以理解为 当前集合(类别集合)的要和连接的那个集合(就是地点集合啦)进行连接的字段,也可以理解为当前集合的外键(就是类别表里的c_id字段啦)
foreignField的参数可以理解为 和上面的差不多,就是要连接的那个集合(就是地点集合)的进行连接的字段(外键),就是地点集合里的c_id字段啦
as的参数可以理解为 结果作为一个数组形式输出,那个数组的名字(这里就是把那个输出结果的数组命名为site_list了)
最后把返回来的结果中的site_list取出来用就行啦
标签:地点,程序,site,查询,类别,lookup,联表,集合,id From: https://www.cnblogs.com/talmudmaster/p/17235939.html