假如有这么2张表
1、省份表(test_provinces)
db.test_provinces.insertMany([{
"_id" : ObjectId("63d78a3a07781d41000431aa"),
"name" : "广东省"
},
{
"_id" : ObjectId("63d78a3a07781d41000431ab"),
"name" : "广西省"
}])
2.城市表(test_city)
db.test_city.insertMany([{
name:'深圳市',
province_id:ObjectId("63d78a3a07781d41000431aa")
},
{
name:'广州市',
province_id:ObjectId("63d78a3a07781d41000431aa")
}
])
现在使用 $lookup 进行连表,如何实现inner join 效果,举例如下
db.test_provinces.aggregate([{
$lookup:{
from:'test_city',
"localField": "_id",
"foreignField": "province_id",
"as": "cityList"
}
}])
问题来了,此处并没有广西的城市,但是查询出来的数据却出现了广西省
可以试试看使用$match操作符限制只选择有城市的省份,然后再执行$lookup操作。
我示例代码:
db.test_provinces.aggregate([
{
$match: {
"_id": {
$in: db.test_city.distinct("province_id")
}
}
},
{
$lookup:{
from:'test_city',
"localField": "_id",
"foreignField": "province_id",
"as": "cityList"
}
}
])
使用$lookup来进行连表查询,参考实例:https://www.yisu.com/zixun/146318.html
MongoDB中实现多表联查的实例教程
https://www.jb51.net/article/254578.htm
按照步骤来
题主,这个问题我来替你解决,若有帮助,还望采纳,点击回答右侧采纳即可。
使用$lookup来进行连表查询:
/* aggregate聚合操作,$unwind将数组拆分成单个元素
* $group 分组依据
* $sum 统计
* $project 将返回值进行筛选,是否返回筛选完后的某个字段
* $match 匹配条件
* */
usingRecord.aggregate([
{
$lookup: {
from: 'resources', /* 要连接的表名 */
localField: 'resource_id', /* 当前表对应的字段 */
foreignField: '_id', /* 要连接的表的字段 */
as: 'resourceInfo' /* 查询结果中显示的字段名 */
},
},
{
$match: {
'user_id': user_id
}
},
{
$unwind: '$resourceInfo'
},
{
$sort: {
_id: -1
}
}
])