MySQl与NoSQL(MongoDB)的语句对比

MySQl与NoSQL(MongoDB)的对比

在这里插入图片描述
目前环境下,只要对事务要求不高的业务都能被MongoDB所取代,属于及其热门的NoSQL数据库

数据库结构

MongoDB属于NoSQL数据库,自然也是没有表相关概念的,该数据库存储使用的是集合,集合中存储的是文档(树状结构数据)
在这里插入图片描述

基本操作的语句对比

  1. 创建数据库
  • MySQL
	CREATE DATABASE 数据库名;
  • MongoDB
	use 数据库名: 创建并且选中数据库,数据库已经存在则直接选中
  1. 查询所有数据库
  • MySQL
	SHOW DATABASE
  • MongoDB
	show dbs: 查询所有数据库
  1. 查询当前选择的数据库
  • MySQL

    未知

  • MongoDB

	db: 查询当前选择的数据库
  1. 选择数据库
  • MySQL
	use 数据库名 ;
  • MongoDB
	use 数据库名: 创建并且选中数据库,数据库已经存在则直接选中
  1. 查询当前数据库中的集合(表)
  • MySQL
	SHOW TABLES
  • MongoDB
	show collections: 查询当前库中的集合
  1. 删除数据库
  • MySQL
	drop database 数据库名;
  • MongoDB
	db.dropDatabase(): 删除当前选中的数据库
  1. 创建集合(表)
  • MySQL
	CREATE TABLE table_name (column_name column_type); 创建表
  • MongoDB
	db.createCollection("集合名"): 创建集合
  1. 删除集合(表)
  • MySQL
	DROP TABLE table_name ;
  • MongoDB
	db.集合名.drop(): 删除集合

注意: 注意: db.集合名 == db.getCollection(“集合名”)

数据类型

  • MySQL

在这里插入图片描述

  • MongoDB
    String(字符串): mongodb中的字符串是UTF-8有效的 
    Integer(整数): 存储数值。整数可以是32位或64位,具体取决于您的服务器
    Boolean(布尔): 存储布尔(true/false)值
    Double(双精度): 存储浮点值
    Arrays(数组): 将数组或列表或多个值存储到⼀个键中
    Timestamp(时间戳): 存储时间戳
    Object(对象): 嵌⼊式⽂档
    Null (空值): 存储Null值
    Symbol(符号): 与字符串相同,⽤于具有特定符号类型的语⾔
    Date(⽇期): 以UNIX时间格式存储当前⽇期或时间
    Object ID(对象ID) : 存储⽂档ID
    Binary data(⼆进制数据): 存储⼆进制数据
    Code(代码): 将JavaScript代码存储到⽂档中
    Regular expression(正则表达式): 存储正则表达式

语法控制集合(表)

1. 插入数据
  • MySQL
	NSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );
  • MongoDB
	db.集合名.insert( 文档 ) : 往集合中插入一个文档
	或
	db.COLLECTION_NAME.save(document)

insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。

2. 删除数据
  • MySQL
	DELETE FROM table_name [WHERE Clause]
  • MongoDB
	db.collection.remove(
	   <query>,
	   <justOne>
	)

query :(可选)删除的文档的条件。

justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

3. 修改数据
  • MySQL
	UPDATE table_name SET field1=new-value1, field2=new-value2
	[WHERE Clause]
  • MongoDB
	db.collection.update(
	   <query>,
	   <update>,
	   {
	     upsert: <boolean>,
	     multi: <boolean>,
	     writeConcern: <document>
	   }
	)

query : update的查询条件,类似sql update查询内where后面的。

update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的

upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

4. 查询数据(基础重要)
  • MySQL
	ELECT column_name,column_name
	FROM table_name
	[WHERE Clause]
	[LIMIT N]

查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。

SELECT 命令可以读取一条或者多条记录。

你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据

你可以使用 WHERE 语句来包含任何条件。

你可以使用 LIMIT 属性来设定返回的记录数。

  • MongoDB
	db.collection.find(query, projection)
	//实例
	db.users.find({},{name:1,age:1,_id:0});

query :可选,使用查询操作符指定查询条件

projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。只有_id 这个主键列的属性才能在查询中被单独设定为0, 其他的必须要统一, 同为1或者同为0, 否则就会报错

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

	db.collection.find().pretty()
	//实例
	db.users.find().pretty()

pretty() 方法以格式化的方式来显示所有文档。

5. 比较操作符
  • (>) 大于 - $gt
  • (<) 小于 - $lt
  • (>=) 大于等于 - $gte
  • (<= ) 小于等于 - $lte
  • (!=) 不等 - $ne
  • 集合运算 - KaTeX parse error: Expected '}', got 'EOF' at end of input: …n 如:{name: {in: [“xiaoyao”,“bunny”]}}
  • 判断存在 - KaTeX parse error: Expected '}', got 'EOF' at end of input: …s 如:{name: {exists:true}}

点击进入菜鸟教程一个非常优秀的教学网站(表格的来源)

MongoDB 与 RDBMS Where 语句比较
操作格式范例MySQL中的类似语句
等于{:}db.col.find({“by”:“菜鸟教程”}).pretty()where by = ‘菜鸟教程’
小于{:{$lt:}}db.col.find({“likes”:{$lt:50}}).pretty()where likes < 50
小于或等于{:{$lte:}}db.col.find({“likes”:{$lte:50}}).pretty()where likes <= 50``where likes > 50
大于{:{$gt:}}db.col.find({“likes”:{$gt:50}}).pretty()where likes > 50
大于或等于{:{$gte:}}db.col.find({“likes”:{$gte:50}}).pretty()where likes >= 50
不等于{:{$ne:}}db.col.find({“likes”:{$ne:50}}).pretty()where likes != 50

6. 逻辑查询

语法 -> find({列:{逻辑操作符: [条件1, 条件2, ...]}})
逻辑操作符
  • (&&) 与 - $and
  • (||) 或 - $or
  • (!) 非 - $not
AND 条件
  • MySQL
	select * from users WHERE age>=28 AND age<=30
  • MongoDB
	db.collection.find(
		{
			key1:value1, 
			key2:value2
		}
	)
//实例
//查询年龄在28到30岁之间的用户信息
	db.users.find({
	    $and:[
				{age:{$gte:28}},
				{age:{$lte:30}}
			]
	})
OR条件
  • MySQL
	select * from users where age<28 and age>30
  • MongoDB
	db.collection.find(
	   {
	      $or: [
	         {key1: value1}, {key2:value2}
	      ]
	   }
	)
//例:
//查询年龄小于 28 或者年龄大于 30 的用户信息
	db.users.find({
	    $or:[
				{age:{$lt:28}},
				{age:{$gt:30}}
			]
	})

7. 模糊查询

  • MySQL
	SELECT * FROM uers WHERE name LIKE '%Java%';
  • MongoDB
	//查询 name 带 Java 的用户信息'($ 为通配符)
	db.users.find({
		name:{$regex:/Java$/i}
	})

8. 排序查询

  • MySQL
	SELECT field1, field2,...fieldN FROM table_name1, table_name2...
	ORDER BY field1 [ASC [DESC], [field2...] [ASC [DESC][默认 ASC]]
	//实例 查询用户表中的姓名和年龄以年龄降序排序
	select name,age from users order By age desc
  • MongoDB
	db.users.find({}).sort({字段: 1}) -> 按照字段升序排列
	db.users.find({}).sort({字段: -1}) -> 按照字段降序排列

9.分页查询

  • MySQL
	SELECT * FROM users [WHERE Clause] [LIMIT N]
	//你可以使用 LIMIT 属性来设定返回的记录数。
	select * from users where name like '%java%' limit start,pageSize
  • MongoDB
	db.users.find({}).skip(num).limit(num)

sikp(num): 跳过num个文档,相当于start
limit(num): 限制显示num个文档,相当于pageSize

MongoDB 的特殊存储方式

直接存入数组数据
  • 增加一个数组
	db.users.updateMany({}, {$set:{hobby:[]}})
  • 给数组字段添加一条数据
	db.users.update({
	    name: "javaUser"
	}, {
	    $push: {hobby:"c++"}
	})
  • 给数组字段添加数据, 不允许数据元素重复
	db.users.update({
	    name: "javaUser"
	}, {
	    $addToSet: {hobby:"java"}
	})
  • 使用each一次添加多条数据
	db.users.update({
	    name: "javaUser"
	}, {
	    $addToSet: {hobby:{$each:["git","MVC","ssm"]}}
	})
  • $pop 删除数组中数据, 1:删除最后一个, -1: 删除第一个
	db.users.update({
	    name: "javaUser"
	}, {
	    $pop:{hobby:-1}
	})
  • $pull 删除数组中数据, 通过指定内容删除
	db.users.update({
	    name: "javaUser"
	}, {
	    $pull:{hobby:"php"}
	})
  • 通过索引修改
	db.users.update({
	    name: 'javaUser'
	}, {
	    $set: {
	        'hobby.1': 'go'
	    }
	})
  • 修改指定的内容
db.users.update({
    name: "javaUser",hobby:"ssm"
}, {
    $set:{"hobby.$":"框架"}
})

在这里插入图片描述

  • 如有错误请各位大神指导, 叩谢了!!
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值