面试题答案
一键面试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. 使用场景举例
假设我们有两个集合:orders
和 products
。
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
数组中。