溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MONGODB如何查詢晉級(jí)

發(fā)布時(shí)間:2021-09-29 11:57:25 來源:億速云 閱讀:123 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(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ǔ),這樣在討論起來才有的說

MONGODB如何查詢晉級(jí)

上面就是本次要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

MONGODB如何查詢晉級(jí)

需求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)確)

MONGODB如何查詢晉級(jí)

需求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的格式

MONGODB如何查詢晉級(jí)

查詢方法 需要使用特殊的 elemMatch查詢方法,來查詢這樣的需求


看完上述內(nèi)容,你們對(duì)MONGODB如何查詢晉級(jí)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(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)容。

AI