MST

星途 面试题库

面试题:MongoDB中$lookup阶段基础联合查询

假设有两个集合,集合A存储用户信息,包含字段'_id'(用户ID)和'name'(用户名);集合B存储用户订单信息,包含字段'user_id'(关联用户ID)和'order_amount'(订单金额)。请使用$lookup阶段实现查询每个用户及其对应的订单总金额。
50.2万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

在MongoDB中,可以使用如下聚合管道操作来实现:

[
    {
        "$lookup": {
            "from": "集合B",
            "localField": "_id",
            "foreignField": "user_id",
            "as": "orders"
        }
    },
    {
        "$addFields": {
            "total_order_amount": {
                "$sum": "$orders.order_amount"
            }
        }
    },
    {
        "$project": {
            "orders": 0
        }
    }
]
  1. $lookup阶段
    • from指定要关联的集合为“集合B”。
    • localField是集合A中的字段_id
    • foreignField是集合B中的字段user_id
    • as将关联后的结果数组命名为orders,添加到集合A的每个文档中。
  2. $addFields阶段
    • 使用$sum操作符计算orders数组中所有order_amount的总和,并将结果命名为total_order_amount
  3. $project阶段
    • 通过设置orders: 0,不显示orders数组,只保留用户信息和计算出的订单总金额。

请根据实际的集合名称替换上述代码中的“集合A”和“集合B”。