MST

星途 面试题库

面试题:MongoDB聚合框架与数据仓库协同工作之基础操作

在MongoDB聚合框架中,简述`$lookup`操作符如何实现与数据仓库类似的关联查询功能,并举例说明其基本语法和使用场景。
11.1万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

1. $lookup实现关联查询功能简述

$lookup操作符在MongoDB聚合框架中用于将一个集合(称为“本地集合”)与另一个集合(称为“外部集合”)进行关联,类似于数据仓库中的连接操作。它通过在本地集合的文档和外部集合的文档之间匹配指定的字段,来生成包含关联数据的新文档。

2. 基本语法

{
    $lookup:
    {
        from: <collection to join>,
        localField: <field from the input documents>,
        foreignField: <field from the documents of the "from" collection>,
        as: <output array field>
    }
}
  • from:要关联的外部集合名称。
  • localField:本地集合中用于关联的字段。
  • foreignField:外部集合中用于关联的字段。
  • as:输出数组字段的名称,关联的文档将被放入这个数组中。

3. 使用场景举例

假设我们有两个集合:ordersproducts

  • orders集合存储订单信息,每个文档包含订单号orderId、产品IDproductId和数量quantity
  • products集合存储产品信息,每个文档包含产品IDproductId、产品名称productName和价格price

我们想查询每个订单及其对应的产品信息。

orders集合示例:

[
    { "orderId": 1, "productId": "p001", "quantity": 2 },
    { "orderId": 2, "productId": "p002", "quantity": 1 }
]

products集合示例:

[
    { "productId": "p001", "productName": "Product A", "price": 10 },
    { "productId": "p002", "productName": "Product B", "price": 15 }
]

聚合查询:

db.orders.aggregate([
    {
        $lookup:
        {
            from: "products",
            localField: "productId",
            foreignField: "productId",
            as: "productInfo"
        }
    }
]);

查询结果:

[
    {
        "orderId": 1,
        "productId": "p001",
        "quantity": 2,
        "productInfo": [
            { "productId": "p001", "productName": "Product A", "price": 10 }
        ]
    },
    {
        "orderId": 2,
        "productId": "p002",
        "quantity": 1,
        "productInfo": [
            { "productId": "p002", "productName": "Product B", "price": 15 }
        ]
    }
]

在这个例子中,$lookup操作符根据orders集合中的productId字段和products集合中的productId字段进行关联,将匹配的产品信息放入productInfo数组中。