注册

MongoDB多表关联查询操作实例详解

MongoDB多表关联查询操作实例详解

MongoDB作为非关系型数据库,虽然没有传统关系型数据库的多表关联查询语句,但我们可以利用一些技巧来实现关联查询。

一、使用$lookup关联查询操作

  1. 创建两个集合

我们以一个订单和一个客户集合为例,在MongoDB中用以下语句创建两个集合:

db.createCollection("orders")
db.createCollection("customers")
  1. 往订单集合插入数据

以以下数据为例,向orders集合中插入若干数据:

{
    "_id" : 1,
    "name" : "order01",
    "customerId" : 1
}
{
    "_id" : 2,
    "name" : "order02",
    "customerId" : 2
}

其中customerId是与customers集合中相同记录的_id字段关联的字段。

  1. 往客户集合插入数据

以下为customers集合中的数据:

{
    "_id" : 1,
    "name" : "customer01"
}
{
    "_id" : 2,
    "name" : "customer02"
}
  1. 使用$lookup关联查询操作

使用以下语句进行关联查询:

db.orders.aggregate([
  {
    $lookup:
      {
        from: "customers",
        localField: "customerId",
        foreignField: "_id",
        as: "customer"
      }
  }
])

查询结果为:

{
    "_id" : 1,
    "name" : "order01",
    "customerId" : 1,
    "customer" : [
        {
            "_id" : 1,
            "name" : "customer01"
        }
    ]
}
{
    "_id" : 2,
    "name" : "order02",
    "customerId" : 2,
    "customer" : [
        {
            "_id" : 2,
            "name" : "customer02"
        }
    ]
}

二、使用DBRef实现多表关联查询操作

DBRef是MongoDB中单个文档中多个集合关联的语法规范。DBRef只是一个简短的对象,由两个字段组成:$ref - 关联的集合名称,$id - 关联记录的_id字段值。

  1. 创建两个集合

我们以一个订单和一个客户集合为例,在MongoDB中用以下语句创建两个集合:

db.createCollection("orders")
db.createCollection("customers")
  1. 往订单集合插入数据

以以下数据为例,向orders集合中插入若干数据:

{
    "_id" : 1,
    "name" : "order01",
    "customer" : {
        "$ref" : "customers",
        "$id" : 1
    }
}
{
    "_id" : 2,
    "name" : "order02",
    "customer" : {
        "$ref" : "customers",
        "$id" : 2
    }
}
  1. 往客户集合插入数据

以下为customers集合中的数据:

{
    "_id" : 1,
    "name" : "customer01"
}
{
    "_id" : 2,
    "name" : "customer02"
}
  1. 使用DBRef实现多表关联查询操作

使用以下语句进行关联查询:

db.orders.find()
    .populate("customer", "_id name")
    .exec(function(err, orders) {
      console.log(orders)
    });

查询结果为:

{
    "_id" : 1,
    "name" : "order01",
    "customer" : {
        "_id" : 1,
        "name" : "customer01"
    }
}
{
    "_id" : 2,
    "name" : "order02",
    "customer" : {
        "_id" : 2,
        "name" : "customer02"
    }
}

以上就是MongoDB多表关联查询操作实例的完整攻略。