美文网首页
MongoDB中的联合查询($lookup)

MongoDB中的联合查询($lookup)

作者: 技术灭霸 | 来源:发表于2020-05-12 02:53 被阅读0次

    在3.2 之前MongoDB不支持join,其官网上推荐的unity jdbc可以把数据取出来进行二次计算实现join运算,但收费版才有这个功能。其他免费的jdbc drive只能支持最基本的SQL语句,不支持join。

    幸运的是MongoDB 3.2 介绍了一个新的$lookup操作,这个操作可以提供一个类似于LEFT OUTER JOIN的操作在两个或者是更多的条件下。

    我们现在使用$lookup操作从user集合中连接数据,这个操作需要一个四个参数的对象:
    1、from:需要连接的集合
    2、localField:在输入文档中的查找字段
    3、foreignField:需要在from集合中查找的字段
    4、as:输出的字段名字

    $lookup:{
                    from:'products', //关联查询表2
                    localField:'product_id', //关联表1的商品编号ID
                    foreignField:'_id',  //匹配表2中的ID与关联表1商品编号ID对应
                    as:'orderLists'  //满足 localField与foreignField的信息加入orderlists集合
                }
            
    

    orders表:

    {
        "_id" : 1,
        "product_id" : 154,
        "status" : 1
    }
     
    {
        "_id" : 2,
        "product_id" : 155,
        "status" : 1
    }
    

    products表:

    {
        "_id" : 154,
        "name" : "笔记本电脑"
    }
    {
        "_id" : 155,
        "name" : "耳机"
    }
    {
        "_id" : 156,
        "name" : "台式电脑"
    }
    

    来查一下:用的Node.js语法,都大同小异。

    const MongoClient = require('mongodb').MongoClient
    const url = 'mongodb://localhost:27017';
     
    MongoClient.connect(url, { useNewUrlParser: true }, function (err, db) {
        if (err) throw err;
        console.log("runoob库已创建!")
     
        var dbo = db.db("runoob");
        
     
        dbo.collection("orders").aggregate([
            {$lookup:
                {
                    from:'products', //关联查询表2
                    localField:'product_id', //关联表1的商品编号ID
                    foreignField:'_id',  //匹配表2中的ID与关联表1商品编号ID对应
                    as:'orderLists'  //满足 localField与foreignField的信息加入orderlists集合
                }
            },
            {$match:{"product_id":154}}//筛选类似与SQL的where
        ]).toArray(function(err,res){
            if(err)throw err;
            console.log(JSON.stringify(res))
            db.close()
        })
       
    })
    

    最后得出的结果:


    image.png

    相关文章

      网友评论

          本文标题:MongoDB中的联合查询($lookup)

          本文链接:https://www.haomeiwen.com/subject/opomnhtx.html