devops icon indicating copy to clipboard operation
devops copied to clipboard

mongo 如何做集合关联,例如订单集合, 云资源集合,资源账单集合

Open heidsoft opened this issue 2 years ago • 0 comments

MongoDB是一个非关系型数据库,它不像传统的SQL数据库那样支持JOIN操作来关联多个表。然而,你可以通过使用$lookup操作符在聚合管道中模拟JOIN操作,创建一个新的数组字段,其中包含来自另一个集合的匹配文档。

以下是一个例子,假设我们有订单集合(orders),云资源集合(resources)和资源账单集合(bills),我们想要将这三个集合关联起来:

db.orders.aggregate([
   {
      $lookup:
         {
           from: "resources",
           localField: "resource_id",
           foreignField: "_id",
           as: "order_resources"
         }
  },
   {
      $lookup:
         {
           from: "bills",
           localField: "bill_id",
           foreignField: "_id",
           as: "order_bills"
         }
  }
])

在这个例子中,$lookup操作符先从resources集合中找到与orders集合中的resource_id字段匹配的所有文档,然后将这些文档添加到新的order_resources数组字段中。然后,它又从bills集合中找到与orders集合中的bill_id字段匹配的所有文档,然后将这些文档添加到新的order_bills数组字段中。

需要注意的是,$lookup操作符只能在聚合管道中使用,不能在普通的查询操作中使用。另外,$lookup操作符只能在同一个数据库中的集合之间进行查找,不能在不同数据库的集合之间进行查找。

heidsoft avatar Oct 27 '23 07:10 heidsoft