MongoDB $lookup

MongoDB $lookup

MongoDB $lookup

在MongoDB中,$lookup是一个非常有用的集合关联操作符,它用于在一个集合中执行类似于SQL中的join操作。通过$lookup,我们可以实现在多个集合之间进行数据关联查询,并且返回结果作为一个新的文档。

语法

$lookup操作符的语法如下所示:

{
  $lookup: {
    from: <集合名称>,
    localField: <本地字段>,
    foreignField: <外部字段>,
    as: <输出字段>
  }
}
  • from: 将要连接的集合的名称。
  • localField: 本地要用于关联的字段。
  • foreignField: 外部要用于关联的字段。
  • as: 输出的字段名称,将关联查询结果存储在这个字段中。

示例

假设我们有两个集合:studentsgrades,其中students中包含学生的信息,grades中包含学生成绩的信息。我们希望将学生成绩和学生信息进行关联查询。

数据准备

首先插入一些示例数据:

// 插入students集合数据
db.students.insertMany([
  { _id: 1, name: "Alice", age: 20 },
  { _id: 2, name: "Bob", age: 21 },
  { _id: 3, name: "Cathy", age: 22 }
])

// 插入grades集合数据
db.grades.insertMany([
  { student_id: 1, score: 85 },
  { student_id: 2, score: 90 },
  { student_id: 3, score: 95 }
])

执行$lookup操作

然后执行$lookup操作来关联studentsgrades集合:

db.students.aggregate([
  {
    $lookup: {
      from: "grades",
      localField: "_id",
      foreignField: "student_id",
      as: "grades"
    }
  }
])

通过上述操作,我们可以得到如下结果:

[
  {
    "_id": 1,
    "name": "Alice",
    "age": 20,
    "grades": [
      {
        "_id": ObjectId("60c992a1f3c69b3a3ca20a6c"),
        "student_id": 1,
        "score": 85
      }
    ]
  },
  {
    "_id": 2,
    "name": "Bob",
    "age": 21,
    "grades": [
      {
        "_id": ObjectId("60c992a1f3c69b3a3ca20a6d"),
        "student_id": 2,
        "score": 90
      }
    ]
  },
  {
    "_id": 3,
    "name": "Cathy",
    "age": 22,
    "grades": [
      {
        "_id": ObjectId("60c992a1f3c69b3a3ca20a6e"),
        "student_id": 3,
        "score": 95
      }
    ]
  }
]

总结

通过$lookup操作符,在MongoDB中实现了两个集合之间的数据关联查询,从而方便我们在复杂数据场景下获取需要的数据。在实际应用中,$lookup常用于多表关联查询、聚合操作等场景,是MongoDB中非常强大和灵活的功能之一。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程