我对比了mysql和mongo的区别

279 阅读1分钟

「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」。

简介

  • NoSQL = Not Only SQL
  • 我们平时开发熟悉的是关系型数据库,而MongoDB是新型非关系型数据库。

使用场景

  • NoSQL用于超大规模数据的存储,谷歌或者Facebook每天为他们的yoghurt手机万亿比特的数据,这些类型的数据存储不需要固定的模式,无须多余的操作就可以和横向扩展了。

RDBMS vs NoSQL

语言概括结构化性能
RDBMS高度组织化结构化数据结构化查询语言基础事务
NoSQL代表着不仅仅是SQL没有声明性查询语言高性能高可用性和可伸缩性

常用命令

基本结构体

public class User {
    //主键
    private Long id;
    //用户名
    private String userName;
    //年龄
    private Integer age;
    //性别
    private Boolean sex;
    //出生日期
    private Date birthDate;
    //上学日期
    private Date schoolDate;
    //工资
    private Double salary;
}

查询

查询ID=139758337331900416的值

sql方式

select * from user where id=139758337331900416

常规查询

db.user.find({'_id':139758337331900416})

高级查询
db.user.aggregate(
[
    {
        $match: {
            _id: 139758337331900416
        }
    }
]
)

001.jpg

模糊查询userName中包含fff5fdd6的数据

sql方式

select * from user where userName like '%fff5fdd6%';

常规查询

/abc/ : 全模糊匹配abc /^abc/: 模糊匹配abc开头 /^abc$/: 查询等于abc的数据(正则)

db.user.find({'userName':/fff5fdd6/});

高级查询

主要就是正则表达式的编写来实现匹配

db.user.aggregate(
[
    {
        $match: {
            'userName': {
                $regex: '.*fff5fdd6'
            }
        }
    }
]
)

查询年龄大于1720822682的数据

sql方式

select * from user where age>1720822682;

常规查询

db.user.find({'age':{'$gt':1720822682}});

高级查询
db.user.aggregate([
  {
    '$match': {
        'age': {
            '$gt': 1720822682
        }
    }
}
]);

002.jpg

003.jpg

分组

报表查询中最常见的就是分组查询了。 下面我们按照入学时间(具体到天)分组汇总信息

sql方式

select date_format(schoolData,'%Y-%m-%d') , count(1) from user group by date_format(schoolData,'%Y-%m-%d') order by date_format(schoolData,'%Y-%m-%d');

常规查询

高级查询
​
db.user.aggregate(
[
    {
        $project: {
            "newSchoolDate": {
                $dateToString: {
                    date: '$schoolDate',
                    format: "%Y-%m-%d"
                }
            }
        }
    },
    {
        $group: {
            "_id": "$newSchoolDate",
            "count": {
                $sum: 1
            }
        }
    },
    {
        $sort: {
            newSchoolDate: -1
        }
    }
]
)
​