MST

星途 面试题库

面试题:MongoDB $lookup阶段复杂联合查询与数据处理

有三个集合,集合User存储用户基本信息,有'_id'(用户ID)、'name'(姓名);集合Order存储订单信息,有'_id'(订单ID)、'user_id'(关联用户ID)、'order_date'(订单日期);集合Product存储产品信息,有'_id'(产品ID)、'product_name'(产品名称),订单集合中通过数组形式的'product_ids'字段关联产品集合。要求查询出每个用户的姓名,及其在2023年10月1日之后下的订单,每个订单需包含订单日期和对应的产品名称列表,使用$lookup阶段完成该操作。
35.7万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
db.User.aggregate([
    {
        $lookup: {
            from: "Order",
            localField: "_id",
            foreignField: "user_id",
            as: "orders",
            pipeline: [
                {
                    $match: {
                        order_date: { $gte: new ISODate("2023-10-01T00:00:00Z") }
                    }
                },
                {
                    $lookup: {
                        from: "Product",
                        localField: "product_ids",
                        foreignField: "_id",
                        as: "products"
                    }
                },
                {
                    $project: {
                        _id: 1,
                        order_date: 1,
                        product_names: "$products.product_name"
                    }
                }
            ]
        }
    },
    {
        $project: {
            name: 1,
            orders: 1
        }
    }
]);