MongoDB Aggregation pipelines(聚合管道)之 $lookup

$lookup

简单连接的语法结构

{
   $lookup:
     {
       from: <collection to join>,
       localField: <field from the input documents>,
       foreignField: <field from the documents of the "from" collection>,
       as: <output array field>
     }
}

简单连接的参数解释

语法值解释说明
from同一个数据库下等待被连接的集合。
localField源集合中的属性名。如果源集合中,某文档没有localField指定的属性,默认会把该属性的值当做null处理。
foreignField被连接的集合的属性名。如果被连接的集合中,某文档没有localField指定的字段,默认会把该属性的值当做null来处理。
as连接后给被连接的集合数组命名。如果输入的集合中已存在该值,则会覆盖。

简单连接的使用示例

1.构造测试数据

// 构造班级数据
db.class0.insertMany([
    {"name": "一年级一班","headmaster": "王老师"},
    {"name": "一年级二班","headmaster": "刘老师"},
    {"name": "一年级三班","headmaster": "李老师"}
]);

// 获取班级的主键
var classesIds = db.class0.find({},{"_id": 1})
// 构造学生的数据
var studentes = [];
for(var i = 0; i < classesIds.length(); i++){
   // 每个班三个学生
   for(var j = 0; j < 3; j++){
	    studentes.push({"name": "学生" + j, "classesId": classesIds[i]._id})
	}
}
// 插入学生数据
db.student.insertMany(studentes);

请添加图片描述

2.使用$lookup连接查询

// 班级连接学生
db.class0.aggregate([
    {
        "$lookup": {
            "from": "student",
            "localField": "_id",
            "foreignField": "classesId",
            "as": "stus"
        }
    }
])

请添加图片描述

// 学生连接班级
db.student.aggregate([
    {
        "$lookup": {
            "from": "class0",
            "localField": "classesId",
            "foreignField": "_id",
            "as": "classes"
        }
    }
])

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值