您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)MONGODB如何查詢晉級(jí),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
MONGODB的使用最近是越來越“不慌張”,某網(wǎng)站上關(guān)于MONGODB 部分替換傳統(tǒng)數(shù)據(jù)庫表的設(shè)計(jì)的思路是越來越多,其實(shí)mongoDB 可以做的事情很多,不過目前的問題是開發(fā)人員可能使用MONGODB 思路還處于萌芽的狀態(tài),另外可能一些 SQL 到 MONGO FIND 的查詢語句不大熟悉,其實(shí)MONGO FIND 的寫法不復(fù)雜,有些SQL 的高級(jí)查詢 MONGODB 大多數(shù)都是么有問題,有問題也大多是人在設(shè)計(jì)MONGODB 的collection 的問題,不過這也不是什么問題,加個(gè)字段,7*24 小時(shí),對(duì)其他的業(yè)務(wù)系統(tǒng),加一個(gè)字段考慮的問題頗多,而MONGO 大多不用考慮,這點(diǎn)是令人欣慰的。
接上期,本期MONGODB 查詢也得復(fù)雜一點(diǎn)了。
有興趣可以看看JSON的整體格式規(guī)范,1個(gè)小時(shí)就OK了
首先我們的有一個(gè)查詢的數(shù)據(jù)基礎(chǔ),這樣在討論起來才有的說
上面就是本次要discuss的數(shù)據(jù),當(dāng)然不是這一條,僅僅展示大致的格式
接上期說
需求1 需要查詢 qty 為 50 的數(shù)據(jù),途中的查詢語句很清晰,大括號(hào)里面的中括號(hào),鍵值用雙引號(hào)引起,之后跟上你的要查詢的數(shù)據(jù)
select * from inventory where qty = 50 這樣的傳統(tǒng)SQL 的寫法
需求2 傳統(tǒng)的DBA 會(huì)對(duì)上面的寫法說點(diǎn)什么,不能用* ,用哪個(gè)字段就要寫哪個(gè)字段,MONGO 也是一樣,請(qǐng)?jiān)诓樵兘Y(jié)果中緊緊展示 qty 其他字段都不展示, 寫法就是在剛才的查詢后面添加一個(gè)條件過濾的方式,需要顯示的字段標(biāo)記 1 不需要顯示的顯示標(biāo)記0
select qty from inventory where qty = 50
需求3 顯示SIZE 字段中 H 屬性為 10的數(shù)據(jù)
select item,qty,size from inventory where size.h = 10
如果數(shù)據(jù)里面有嵌套,則需要從根部的節(jié)點(diǎn)開始寫起
需求 4 我們查詢 SIZE.H 大于等于10 的并且 ITEM 是PLANNER 的數(shù)據(jù)
select item,qty,size.h,size.w from inventory where size,h >= 10 and item = "planner"
需求5 有一些需求在傳統(tǒng)的數(shù)據(jù)庫中是不存在的,你可以查詢字段是不是為 NULL ,空,但你在已經(jīng)固化好的表SCHEMA 中,你是不會(huì)問每行的數(shù)據(jù)的字段是不是存在,但MONGODB 的字段在每一個(gè) document 可能是不存在的。所以下面的語句在傳統(tǒng)的數(shù)據(jù)庫中是沒有可比性的
下面的查詢就是查詢 status 這個(gè)KEY 存在于 inventory collection 的具體記錄,當(dāng)然你也可以查詢到底有多少 docuemnts 存在在這個(gè)collection的數(shù)量。
計(jì)算collection中有多少 有status 這個(gè)KEY的documents 的數(shù)量
非要用傳統(tǒng)的SQL 語句表達(dá),select count(*) from inventory as a where status is not null (只能是貼近,因?yàn)槠鋵?shí)用IS NOT NULL 表達(dá)不準(zhǔn)確)
需求6 如果我們要查詢一個(gè)數(shù)值的范圍,怎么查詢,這里面的提醒有些 DEVELOPER ,就算是MONGODB 的SCHEMA 你也不能想一出是一出,如果你后期的查詢的數(shù)值是用 RANGE 的方式查詢的,建議還是使用非,“”雙引號(hào)的字符來進(jìn)行,這樣以后處理起來,性能上不是很好。
select item,qty,size.h,size.w from inventory where qty between 45 and 50
需求 7 傳統(tǒng)查詢中的 IN 是用的比較多,怎么來用MONGODB 的方式來表達(dá)
select item,qty,size.h,size.w from inventory where qty in (45,50)
需求 8 排序和 輸出前幾條數(shù)據(jù)
限制顯示數(shù)據(jù)的數(shù)據(jù)量,在末尾加入.limit(顯示數(shù)量) ,和SQL SERVER top ,mysql 的 limit , ORACLE rownum 一樣
排序的方法也是很簡(jiǎn)單,在查詢的語句后面加上sort({你要排序的字段以及你是正序還是倒序}), 這里建議如果沒有必要,不要進(jìn)行排序。
需求9 最后我們看一下,一個(gè)比較不常見的document,這是一個(gè)數(shù)組中包含嵌套的數(shù)據(jù)存儲(chǔ)方式,且不說這樣好不好,我們現(xiàn)在的需求就是查詢 TAGS 中type2 是 IRON 的記錄
下面是這個(gè)document的格式
查詢方法 需要使用特殊的 elemMatch查詢方法,來查詢這樣的需求
看完上述內(nèi)容,你們對(duì)MONGODB如何查詢晉級(jí)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。