MongoDB中多表关联查询JOIN操作$lookup使用教程

MongoDB 是一个 NoSQL 数据库,NoSQL 的最大缺点就是 Join 查询不好操作。NoSQL 并不是说它不是一个 SQL,而是一个 not only sql,不仅仅是一个 SQL。那么在 Mongo 中如何进行多表 Join 查询呢?今天我们就一起来学习学习!

在 MongoDB 中,多表关联查询,有多种方式。今天我们先来学习 $lookup 的使用,它支持两表以上,3 表(集合)等都可以,$lookup 相当于左连接查询。

$lookup

NoSQL != No JOIN。NoSQL 并不代表不能 JOIN 操作。

我有一个 order 集合,还有一个 user 集合,还有一个 product 集合。或者把它们称为表,都可以,叫法随便。下面是我为了讲清楚 $lookup 的用法,所用的测试数据!

db.product.insert({"_id":1,"productname":"商品1","price":15});
db.product.insert({"_id":2,"productname":"商品2","price":36});

db.order.insert({"_id":1,"pid":1,"ordername":"订单1","uid":1});
db.order.insert({"_id":2,"pid":2,"ordername":"订单2","uid":2});
db.order.insert({"_id":3,"pid":2,"ordername":"订单3","uid":2});
db.order.insert({"_id":4,"pid":1,"ordername":"订单4","uid":1});

db.user.insert({"_id":1,"username":1});
db.user.insert({"_id":2,"username":2});

db.product.find();
db.order.find();
db.user.find();

$lookup 两表关联join

看下面的查询语句:

db.product.aggregate([
    {
      $lookup:
        {
          from: "order",
          localField: "_id",
          foreignField: "pid",
          as: "inventory_docs"
        }
   }
]);

执行的结果如下所示,只列了一条数据:

{
    "_id" : 1.0,
    "productname" : "商品1",
    "price" : 15.0,
    "inventory_docs" : [ 
        {
            "_id" : 1.0,
            "pid" : 1.0,
            "ordername" : "订单1"
        }, 
        {
            "_id" : 4.0,
            "pid" : 1.0,
            "ordername" : "订单4"
        }
    ]
}

lookup 就是使用 aggregate 的 $lookup 属性,$lookup 操作需要一个四个参数的对象,该对象的属性解释如下:

  • localField:在输入文档中的查找字段
  • from:需要连接的集合
  • foreignField:需要在from集合中查找的字段
  • as:输出的字段名字

在输出的结果中,会包含一个 inventory_docs 的字段,它会把 order 中所关联的数据在数组中展现。

$lookup 三表关联join

$lookup 的三表关联查询很简单,只需要配置两个 $lookup 即可。具体查询代码如下:

db.order.aggregate([{
    $lookup:
    {
      from: "product",
      localField: "pid",
      foreignField: "_id",
      as: "inventory_docs"
    }
},{
    $lookup:
    {
      from: "user",
      localField: "uid",
      foreignField: "_id",
      as: "user_docs"
    }
}]);

其实除了 $lookup,populate 也可以用来进行关联查询,这个 populate 的用法,我们后面再专门写文章来学习!

MongoDB中多表关联查询JOIN操作$lookup使用教程

: » MongoDB中多表关联查询JOIN操作$lookup使用教程

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/252777.html

(0)
上一篇 2022年5月4日 21:19
下一篇 2022年5月4日 21:24

相关推荐

发表回复

登录后才能评论