📜  mongo db $lookup 遍历数据 (1)

📅  最后修改于: 2023-12-03 14:44:21.117000             🧑  作者: Mango

MongoDB $lookup 遍历数据

概述

在 MongoDB 中使用 $lookup 操作符可以实现类似于 SQL 中的 JOIN 操作。它允许您在多个集合之间建立关联,并通过关联字段将相关数据合并为一个输出文档。

语法

db.collection.aggregate([
   {
      $lookup:
         {
           from: <collection>,
           localField: <field>,
           foreignField: <field>,
           as: <output array>
         }
   }
])
  • from: 指定要关联的集合名称。
  • localField: 本集合中用于关联的字段。
  • foreignField: 关联集合中用于关联的字段。
  • as: 将关联数据存储到输出文档中的新数组字段。

示例

假设我们有两个集合:usersordersusers 集合包含每个用户的详细信息,而 orders 集合包含相应用户的订单信息。我们可以使用 $lookup 操作符将这两个集合关联起来。

// Users 集合
[
   { _id: 1, name: 'John Doe' },
   { _id: 2, name: 'Alice Smith' },
   { _id: 3, name: 'Bob Johnson' }
]

// Orders 集合
[
   { _id: 1, userId: 1, product: 'iPhone' },
   { _id: 2, userId: 2, product: 'MacBook' },
   { _id: 3, userId: 2, product: 'iPad' },
   { _id: 4, userId: 3, product: 'Apple Watch' }
]

运行以下聚合查询将关联两个集合,并输出包含用户信息和订单信息的新文档:

db.users.aggregate([
   {
      $lookup:
         {
           from: 'orders',
           localField: '_id',
           foreignField: 'userId',
           as: 'orders'
         }
   }
])

输出结果将如下所示:

[
   {
      _id: 1,
      name: 'John Doe',
      orders: [
         { _id: 1, userId: 1, product: 'iPhone' }
      ]
   },
   {
      _id: 2,
      name: 'Alice Smith',
      orders: [
         { _id: 2, userId: 2, product: 'MacBook' },
         { _id: 3, userId: 2, product: 'iPad' }
      ]
   },
   {
      _id: 3,
      name: 'Bob Johnson',
      orders: [
         { _id: 4, userId: 3, product: 'Apple Watch' }
      ]
   }
]

以上示例将通过将订单信息添加到每个用户文档的 orders 数组中,展示了如何使用 $lookup 操作符关联两个集合的数据。

请注意,$lookup 操作符还可以与其他聚合阶段一起使用,以便在关联之前对数据进行过滤、排序和重塑等操作。

希望以上介绍对您理解 MongoDB $lookup 的使用有所帮助!