MySQL與Mongo簡(jiǎn)單的查詢實(shí)例代碼
首先在這里我就不說(shuō)關(guān)系型數(shù)據(jù)庫(kù)與非關(guān)系型數(shù)據(jù)庫(kù)之間的區(qū)別了(百度上有很多)直接切入主題
我想查詢的內(nèi)容是這樣的:分?jǐn)?shù)大于0且人名是bob或是jake的總分?jǐn)?shù) 平均分?jǐn)?shù) 最小分?jǐn)?shù) 最大分?jǐn)?shù) 計(jì)數(shù)
舉這個(gè)實(shí)例來(lái)試試用MySQL和mongodb分別寫一個(gè)查詢
首先我們先做一些準(zhǔn)備工作
MySQL的數(shù)據(jù)庫(kù)結(jié)構(gòu)如下
CREATE TABLE `new_schema`.`demo` ( `id` INT NOT NULL, `person` VARCHAR(45) NOT NULL, `score` VARCHAR(45) NOT NULL, PRIMARY KEY (`id`));
建完表之后我們來(lái)插入一些數(shù)據(jù)
INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('1', 'bob', '50'); INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('2', 'jake', '60'); INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('3', 'bob', '100'); INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('6', 'jake', '100'); INSERT INTO `new_schema`.`demo` (`id`, `person`, `score`) VALUES ('8', 'li', '100');
我截個(gè)圖方便看一下結(jié)構(gòu)
好 接下來(lái)我們進(jìn)入mongodb的準(zhǔn)備工作 看一下建立的mongodb的集合里面文檔的結(jié)構(gòu)(基本跟MySQL一毛一樣)在這里我就不寫插入文檔的具體過(guò)程了 (為了便看mongodb的顯示我都用兩種格式顯示:一個(gè)是表哥模塊顯示 一個(gè)是文本模塊顯示)
這個(gè)是表格模塊顯示
這個(gè)是文本模塊顯示
/* 1 */ { "_id" : ObjectId("58043fa8e9a7804c05031e17"), "person" : "bob", "sorce" : 50 } /* 2 */ { "_id" : ObjectId("58043fa8e9a7804c05031e18"), "person" : "bob", "sorce" : 100 } /* 3 */ { "_id" : ObjectId("58043fa8e9a7804c05031e19"), "person" : "jake", "sorce" : 60 } /* 4 */ { "_id" : ObjectId("58043fa8e9a7804c05031e1a"), "person" : "jake", "sorce" : 100 } /* 5 */ { "_id" : ObjectId("58043fa8e9a7804c05031e1b"), "person" : "li", "sorce" : 100 }
開始進(jìn)入正題
現(xiàn)在我想查的MySQL語(yǔ)句是這樣的(分?jǐn)?shù)大于0且人名是bob或是jake的總分?jǐn)?shù) 平均分?jǐn)?shù) 最小分?jǐn)?shù) 最大分?jǐn)?shù) 計(jì)數(shù))
SELECT person, SUM(score), AVG(score), MIN(score), MAX(score), COUNT(*) FROM demo WHERE score > 0 AND person IN('bob','jake') GROUP BY person;
下面開始用Mongo寫出這個(gè)查詢
首先想到的是聚合框架
先用$match過(guò)濾 分?jǐn)?shù)大于0且人名是bob或是jake
db.demo.aggregate( { "$match":{ "$and":[ {"sorce":{"$gt":0}}, {"person":{"$in":["bob","jake"]}} ] } }
得到這個(gè)結(jié)果
這個(gè)是表哥模塊顯示的結(jié)果:
這個(gè)是文本模塊顯示的結(jié)果:
/* 1 */ { "_id" : ObjectId("58043fa8e9a7804c05031e17"), "person" : "bob", "sorce" : 50 } /* 2 */ { "_id" : ObjectId("58043fa8e9a7804c05031e18"), "person" : "bob", "sorce" : 100 } /* 3 */ { "_id" : ObjectId("58043fa8e9a7804c05031e19"), "person" : "jake", "sorce" : 60 } /* 4 */ { "_id" : ObjectId("58043fa8e9a7804c05031e1a"), "person" : "jake", "sorce" : 100 }
然后想要分組并且顯示最大 最小 總計(jì) 平均值 和計(jì)數(shù)值
那么$group派上用場(chǎng)了:
db.demo.aggregate( { "$match":{ "$and":[ {"sorce":{"$gt":0}}, {"person":{"$in":["bob","jake"]}} ] } }, { "$group":{"_id":"$person", "sumSorce":{"$sum":"$sorce"}, "avgSorce":{"$avg":"$sorce"}, "lowsetSorce":{"$min":"$sorce"}, "highestSorce":{"$max":"$sorce"}, "count":{"$sum":1}} } )
得到的結(jié)果就是 分?jǐn)?shù)大于0且人名是bob或是jake的總分?jǐn)?shù) 平均分?jǐn)?shù) 最小分?jǐn)?shù) 最大分?jǐn)?shù) 計(jì)數(shù)
結(jié)果的表格模塊顯示:
結(jié)果的文本模塊顯示:
/* 1 */ { "_id" : "bob", "sumSorce" : 150, "avgSorce" : 75.0, "lowsetSorce" : 50, "highestSorce" : 100, "count" : 2.0 } /* 2 */ { "_id" : "jake", "sumSorce" : 160, "avgSorce" : 80.0, "lowsetSorce" : 60, "highestSorce" : 100, "count" : 2.0 }
以上所述是小編給大家介紹的MySQL與Mongo簡(jiǎn)單的查詢實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- MySQL中interactive_timeout和wait_timeout的區(qū)別
- mysql 5.6.13 免安裝版配置方法詳解
- MySQL數(shù)據(jù)庫(kù)21條最佳性能優(yōu)化經(jīng)驗(yàn)
- CentOS 下yum安裝mysql、jdk和tomcat的方法
- ubuntu系統(tǒng)中安裝mysql5.6(通過(guò)二進(jìn)制)
- 64位 win10系統(tǒng)安裝綠色版mysql-5.7.16-winx64的教程
- mysql 5.7.16 安裝配置方法圖文教程
- MySQL5.7.16綠色版安裝教程詳解
- mysql 實(shí)現(xiàn)互換表中兩列數(shù)據(jù)方法簡(jiǎn)單實(shí)例
相關(guān)文章
mysql基于正則實(shí)現(xiàn)模糊替換字符串的方法分析
這篇文章主要介紹了mysql基于正則實(shí)現(xiàn)模糊替換字符串的方法,結(jié)合具體實(shí)例對(duì)比分析了使用正則實(shí)現(xiàn)mysql字符串替換的注意事項(xiàng)與相關(guān)操作技巧,需要的朋友可以參考下2017-03-03Mysql 數(shù)字類型轉(zhuǎn)換函數(shù)
Mysql 數(shù)字類型轉(zhuǎn)換函數(shù),有此需要的朋友可以參考下用法。2009-08-08解決MySQL5.1安裝時(shí)出現(xiàn)Cannot create windows service for mysql.error
這篇文章主要介紹了解決MySQL5.1安裝時(shí)出現(xiàn)Cannot create windows service for mysql.error:0問(wèn)題的方法2016-06-06MySQL教程DML數(shù)據(jù)操縱語(yǔ)言示例詳解
這篇文章主要為大家介紹了MySQL教程中DML數(shù)據(jù)操縱語(yǔ)言的示例詳解,要想學(xué)好MySQL最重要的是要先學(xué)好數(shù)據(jù)操縱語(yǔ)言DML,本文對(duì)其進(jìn)行了全面的講解2021-10-10mysql內(nèi)連接,連續(xù)兩次使用同一張表,自連接方式
這篇文章主要介紹了mysql內(nèi)連接,連續(xù)兩次使用同一張表,自連接方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Navicat如何遠(yuǎn)程連接云服務(wù)器數(shù)據(jù)庫(kù)
這篇文章主要介紹了Navicat如何遠(yuǎn)程連接云服務(wù)器數(shù)據(jù)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11解決Navicat for MySQL 連接 MySQL 報(bào)2005錯(cuò)誤的問(wèn)題
在本地MySQL的服務(wù)啟動(dòng)后,由于Navicat的一些功能需要聯(lián)網(wǎng)才可以使用,今天重點(diǎn)給大家介紹Navicat for MySQL 連接 MySQL 報(bào)2005 -Unknown MySQL server host ‘localhost’(0)錯(cuò)誤的情況與解決方法,感興趣的朋友一起看看吧2021-05-05