通过实例讲清楚MongoDB九种聚合操作

本文详细介绍了MongoDB的聚合操作,包括基本概念、聚合管道如$project、$limit、$skip、$sort等,并通过实例演示了如何进行数据投影、筛选、排序、分组等操作,适用于MongoDB的查询与数据分析。
摘要由CSDN通过智能技术生成

1 文章概述

1.1 基本概念

MongoDB是一种非关系型数据库,数据最终存储为BSON(Binary JSON)类型。MongoDB包含三个重要逻辑概念:数据库、集合和文档,与关系型数据库相关概念映射如下图:

1.2 数据准备

1.2.1 逻辑设计

bookdb数据库包含library与book两个集合,相关字段说明如下图:

1.2.2 新增数据

// 创建数据库
use bookdb

// 新增图书馆
db.library.insertMany([
    {
        "_id": 1,
        "library_name": "图书馆_1"
    },
    {
        "_id": 2,
        "library_name": "图书馆_2"
    },
    {
        "_id": 3,
        "library_name": "图书馆_3"
    }
])

// 新增图书
db.book.insertMany([
    {
        "_id": 1,
        "book_type": 1,
        "book_name": "图书_1",
        "book_price": 10,
        "book_count": 100,
        "borrowers": [{
            "name": "张三",
            "id": 100
        }, {
            "name": "李四",
            "id": 200
        }],
        "library_id": 1
    },
    {
        "_id": 2,
        "book_type": 2,
        "book_name": "图书_2",
        "book_price": 20,
        "book_count": 100,
        "borrowers": [{
            "name": "张三",
            "id": 100
        }],
        "library_id": 2
    },
    {
        "_id": 3,
        "book_type": 1,
        "book_name": "图书_3",
        "book_price": 30,
        "book_count": 100,
        "borrowers": [{
            "name": "张三",
            "id": 100
        }, {
            "name": "王五",
            "id": 300
        }],
        "library_id": 2
    }
])

2 聚合概念

2.1 基本语法

MongoDB聚合语法第一个参数是管道:文档在上个管道处理完后传递给下个管道,第二个参数是选项:设置聚合操作特性

db.collection.aggregate(pipeline, options)

2.2 聚合管道

常用聚合管道有以下九种类型:

$project:对文档进行投影

$limit:输出管道内前N个文档

$skip:跳过管道内前N个文档

$sort:对文档进行排序

$out:输出管道中文档

$match:对文档进行筛选

$unwind:铺平文档中的数组字段

$lookup:对文档进行查询

$group:对文档进行分组

3 聚合实例

3.1 project

1表示展示某字段

0表示不展示某字段

借阅人编号和姓名拆分成两个数组

db.book.aggregate({
    $project: {
        "_id": 0,
        "book_name": 1,
        "borrowerIds": "$borrowers.id",
        "borrowerNames": "$borrowers.name"
    }
})

---------------------------------------------------------

// 1
{
    "book_name": "图书_1",
    "borrowerIds": [
        100,
        200
    ],
    "borrowerNames": [
        "张三",
        "李四"
    ]
}

// 2
{
    "book_name": "图书_2",
    "borrowerIds": [
        100
    ],
    "borrowerNames": [
        "张三"
    ]
}

// 3
{
    "book_name": "图书_3",
    "borrowerIds": [
        100,
        300
    ],
    "borrowerNames": [
        "张三",
        "王五"
    ]
}

3.2 limit

只展示一个投影结果

db.book.aggregate([
    {
        $project: {
            "_id": 0,
            "book_name": 1,
            "borrowerIds": "$borrowers.id",
            "borrowerNames": "$borrowers.name"
        }
    },
    {
        $limit: 1
    }
])

---------------------------------------------------------

// 1
{
    "book_name": "图书_1",
    "borrowerIds": [
        100,
        200
    ],
    "borrowerNames": [
        "张三",
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值