为了账号安全,请及时绑定邮箱和手机立即绑定

【金秋打卡】第5天 mongodb 数据关系

标签:
MongoDB

课程名称web前端架构师

课程章节:第14周 第七章 mongodb 高级内容

主讲老师:张轩

课程内容: mongodb 数据关系

不同集合的数据关系

两种实现手段

  • 内嵌
  • 引用

内嵌

之前使用的集合就是内嵌的. hobbies时内嵌的

// 1
{
    "_id": ObjectId("635a37b110f9b16ff81f6cb1"),
    "username": "aaa",
    "password": "123456",
    "hobbies": [
        "play",
        "sleep"
    ],
    "date": ISODate("2022-10-27T09:47:29.324Z"),
    "age": NumberInt("12"),
    "createAt": ISODate("2022-10-27T07:48:01.475Z"),
    "__v": NumberInt("0")
}

// 2
{
    "_id": ObjectId("635a53ed99310000a9001714"),
    "username": "root",
    "password": 1234567,
    "hobbies": [
        "play"
    ],
    "age": 20
}

引用

有两个集合, 球员和球队两个集合 。例如我们知道球队的名字,想要查找球队下所有的球员
我们可能需要两次查询

  • 根据名字查找球队
  • 根据球队 id 查找球员
var team = db.teams.find({
  name: "Lakers"
});
db.users.find({
  team: team._id
});

聚合的概念和基本用法

聚合操作将来自多个文档的值组合在一起,并且可以对分组数据执行各种操作以返回相应的结果。

聚合常用操作符

  • $group 将collection中的document分组,可用于统计结果
  • $match 过滤数据,只输出符合结果的文档
  • $project 修改输入文档的结构(例如重命名,增加、删除字段,创建结算结果等)
  • $sort 将结果进行排序后输出
  • $limit 限制管道输出的结果个数
  • $skip 跳过制定数量的结果,并且返回剩下的结果

Group 的书写格式

例如查询球队分组结果

db.users.aggregate({
    $group: {
        _id: "$team"
    }
})

表达式操作符

KaTeX parse error: Expected ‘EOF’, got ‘计’ at position 5: sum 计̲算总和,{sum: 1}表示返回总和×1的值(即总和的数量),使用 {sum: 'sum: ′制定字段’} 也能直接获取制定字段的值的总和

  • $avg 求平均值
  • $min 求min值
  • $max 求max值
  • $push 将结果文档中插入值到一个数组中
  • $first 根据文档的排序获取第一个文档数据
  • $last 同理,获取最后一个数据

例如我们想要将球队球员的年龄相加

db.users.aggregate({
    $group: {
        _id: "$team",
        total: {
            $sum: '$age'
				}
    }
})

多个操作符一起使用

db.users.aggregate([{
    $group: {
        _id: "$team",
        total: {
            $sum: "$age"
        },
        avgage: {
            $avg: "$age"
        },
        count: {
            $sum: 1
        }
    }
}, {
    $sort: {
        total: 1
    }
}])

图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Python工程师
手记
粉丝
2
获赞与收藏
1

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消