mongodb 连表如何实现

假如有这么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
   }
  }
 ])