首先在這里我就不說關系型數據庫與非關系型數據庫之間的區別了(百度上有很多)直接切入主題
我想查詢的內容是這樣的:分數大于0且人名是bob或是jake的總分數 平均分數 最小分數 最大分數 計數
舉這個實例來試試用MySQL和mongodb分別寫一個查詢
首先我們先做一些準備工作
MySQL的數據庫結構如下
CREATE TABLE `new_schema`.`demo` (`id` INT NOT NULL,`person` VARCHAR(45) NOT NULL,`score` VARCHAR(45) NOT NULL,PRIMARY KEY (`id`));
建完表之后我們來插入一些數據
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');
我截個圖方便看一下結構
好 接下來我們進入mongodb的準備工作 看一下建立的mongodb的集合里面文檔的結構(基本跟MySQL一毛一樣)在這里我就不寫插入文檔的具體過程了 (為了便看mongodb的顯示我都用兩種格式顯示:一個是表哥模塊顯示 一個是文本模塊顯示)
這個是表格模塊顯示
這個是文本模塊顯示
/* 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}
開始進入正題
現在我想查的MySQL語句是這樣的(分數大于0且人名是bob或是jake的總分數 平均分數 最小分數 最大分數 計數)
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寫出這個查詢
首先想到的是聚合框架
先用$match過濾 分數大于0且人名是bob或是jake
db.demo.aggregate({"$match":{"$and":[{"sorce":{"$gt":0}},{"person":{"$in":["bob","jake"]}}]}}
得到這個結果
這個是表哥模塊顯示的結果:
這個是文本模塊顯示的結果:
/* 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}
然后想要分組并且顯示最大 最小 總計 平均值 和計數值
那么$group派上用場了:
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}} })
得到的結果就是 分數大于0且人名是bob或是jake的總分數 平均分數 最小分數 最大分數 計數
結果的表格模塊顯示:
結果的文本模塊顯示:
/* 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簡單的查詢實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!
新聞熱點
疑難解答