天天看点

MySQl与NoSQL(MongoDB)的语句对比MySQl与NoSQL(MongoDB)的对比

MySQl与NoSQL(MongoDB)的对比

MySQl与NoSQL(MongoDB)的语句对比MySQl与NoSQL(MongoDB)的对比

目前环境下,只要对事务要求不高的业务都能被MongoDB所取代,属于及其热门的NoSQL数据库

数据库结构

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

MySQl与NoSQL(MongoDB)的语句对比MySQl与NoSQL(MongoDB)的对比

基本操作的语句对比

  1. 创建数据库

  • MySQL
  • MongoDB
use 数据库名: 创建并且选中数据库,数据库已经存在则直接选中
           
  1. 查询所有数据库

  • MySQL
SHOW DATABASE
           
  • MongoDB
show dbs: 查询所有数据库
           
  1. 查询当前选择的数据库

  • MySQL

    未知

  • MongoDB
db: 查询当前选择的数据库
           
  1. 选择数据库

  • MySQL
  • MongoDB
use 数据库名: 创建并且选中数据库,数据库已经存在则直接选中
           
  1. 查询当前数据库中的集合(表)

  • MySQL
SHOW TABLES
           
  • MongoDB
show collections: 查询当前库中的集合
           
  1. 删除数据库

  • MySQL
  • MongoDB
db.dropDatabase(): 删除当前选中的数据库
           
  1. 创建集合(表)

  • MySQL
CREATE TABLE table_name (column_name column_type); 创建表
           
  • MongoDB
db.createCollection("集合名"): 创建集合
           
  1. 删除集合(表)

  • MySQL
  • MongoDB
db.集合名.drop(): 删除集合
           

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

数据类型

  • MySQL
MySQl与NoSQL(MongoDB)的语句对比MySQl与NoSQL(MongoDB)的对比
  • 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
  • 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
  • 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

sikp(num): 跳过num个文档,相当于start

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

MongoDB 的特殊存储方式

直接存入数组数据

  • 增加一个数组
  • 给数组字段添加一条数据
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.$":"框架"}
})
           
MySQl与NoSQL(MongoDB)的语句对比MySQl与NoSQL(MongoDB)的对比
  • 如有错误请各位大神指导, 叩谢了!!