MongoDB聚合查询实战:购物记录分析

本文将以购物记录为例,讲解如何使用MongoDB的聚合查询功能进行数据分析。

数据准备

假设我们有两个集合:

  • shoppingRecords:存储购物记录,包含以下字段:
    • serialNum:流水号
    • shopperId:购物者ID
    • date:购物日期
    • shoppingList:购物清单
  • shopper:存储购物者信息,包含以下字段:
    • shopperId:购物者ID
    • phone:电话号码
    • shoppingTimes:购物次数

以下是一些示例数据:

db.shoppingRecords.insertMany([
  { serialNum: '001', shopperId: '1001', date: '20230519', shoppingList: ['apple', 'banana', 'orange'] },
  { serialNum: '002', shopperId: '1002', date: '20230612', shoppingList: ['romaine lettuce', 'ham sausage', 'eggs'] },
  { serialNum: '003', shopperId: '1003', date: '20230613', shoppingList: ['chicken', 'beef', 'pork'] },
  // ... other shopping records
]);

db.getCollection('shopper').insertMany([
  {shopperId:'1001',phone:'13777554321', shoppingTimes:8},
  {shopperId:'1002',phone:'13876541234', shoppingTimes:12},
  {shopperId:'1003',phone:'13919911225', shoppingTimes:36},
  {shopperId:'1004',phone:'12563698746', shoppingTimes:7}
])

聚合查询示例

  1. 查找特定购物者的购物记录

    查找购物者ID为'1002'的购物记录,仅显示日期和购物清单,并将购物清单展开,每一件商品作为一行记录展示,并将商品名字这一列重命名为'commodity':

    db.shoppingRecords.aggregate([
        { $match: { shopperId: '1002' } },
        { $project: { _id: 0, date: 1, shoppingList: 1 } },
        { $unwind: '$shoppingList' },
        { $project: { date: 1, commodity: '$shoppingList' } }
    ])
    
  2. 展示每位顾客的购物流水号和电话号码

    使用$lookup操作符关联shoppingRecordsshopper集合,展示每位顾客的shopperId、购买流水号serialNum和电话号码phone,其中serialNum流水号用列表呈现:

    db.shoppingRecords.aggregate([
        { $lookup: { from: 'shopper', localField: 'shopperId', foreignField: 'shopperId', as: 'shopperInfo' } },
        { $project: { _id: 0, shopperId: 1, serialNum: 1, phone: { $arrayElemAt: ['$shopperInfo.phone', 0] } } }
    ])
    
  3. 统计每个购物者的购物次数

    使用$group操作符按照shopperId分组,并使用$sum操作符统计每个购物者的购物次数:

    db.shoppingRecords.aggregate([
        { $group: { _id: '$shopperId', totalShoppingTimes: { $sum: 1 } } }
    ])
    
  4. 找到每个购物者最新的一个购物流水号

    使用$sort操作符按照日期降序排序,然后使用$group操作符按照shopperId分组,并使用$first操作符获取每个分组的第一个serialNum,即最新的购物流水号:

    db.shoppingRecords.aggregate([
        { $sort: { date: -1 } },
        { $group: { _id: '$shopperId', latestSerialNum: { $first: '$serialNum' } } }
    ])
    

总结

本文介绍了如何使用MongoDB聚合查询进行购物记录分析,包括查找特定购物者的购物记录、展示每位顾客的购物流水号和电话号码、统计购物次数以及找到每个购物者最新的购物流水号等。聚合查询功能强大且灵活,可以根据实际需求进行各种复杂的数据分析。

MongoDB聚合查询实战:购物记录分析

原文地址: https://www.cveoy.top/t/topic/5QU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录