天天看點

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)的對比
  • 如有錯誤請各位大神指導, 叩謝了!!