最近一段時間比較閑,老大做代碼整合,我得以有足夠的時間來學習。因為語言學多了,慢慢也覺得沒有什麼意思了。其他組用mongodb,我也跟下潮流,學習了一點。鑒於我這種快速上手的,因為基礎不怎麼牢靠,也總是會忘記。看著《mongodb權威指南》,雖然是英文版的,但是沒有一點閱讀的難度,大概是這本書寫得確實是讓人好理解吧。平時看一些英文的資料,堅持一個小時就不錯了,犯困,看這個,不會困,只是會有些命令不能馬上理解。先說下查詢吧。我覺得我對於資料庫的瞭解只是限於增刪改查這些操作,至於更深入的東西,不管是對於哪種資料庫都沒有深入接觸過。畢竟不是DBA嘛,我們只要知道怎樣用自己熟悉的語言調用資料庫就好了。
關於mongodb的一些介紹,我也不再累贅了,網上多得是,據說是非關係型資料庫,好多時候感覺不像是資料庫,更接近某些函數,當然mongodb確實封裝了很多函數了。
1.find
content是一個collection,相當於關係型資料庫中的表,db是固定不變的。如果find中沒有帶參數,就相當於
select * from table
返回資料表中的所有記錄的所有欄位。
可以查詢符合某些條件的記錄(document)。
查詢gender欄位是male的document,相當於select * from table where gender=male
當然查詢條件可以是多個
很簡單的語句,我就不做太多解釋了,大家都懂得啊。
所有欄位都返回,把人看得眼花繚亂的,要是能選擇關注的欄位就好了。那是當然了。
其中_id是插入資料之後,資料庫自動給加上的,相當於主鍵。一定要看清楚了,find所帶的參數,除條件之外,還有一個{},將欄位的值設定為1表明是要將這個欄位顯示出來。_id雖然沒有顯式輸出,也會輸出。當然,還可以 指定不要輸出的欄位,
將_id設定為0,表明明確聲明不顯示這個欄位,所以就只顯示我們強烈要求要輸出的欄位嘍!
2.使用>,>=,<,<=,!=分別對應gt,gte,lt,lte,ne
例如尋找age在10到25之間的document
尋找degree不是bachelor的document
關於or,有兩種實現方法,當然,這兩種方法對應不同的情境。
使用in,判斷某個欄位是否屬於集合中的一員,
例如查看age是11或者15或者22或者是25的document
使用nin尋找不在一個範圍之內的
當然,使用in來判斷時候是有局限性的,只能判斷一個欄位。如果是需要匹配兩個欄位,in就不能滿足要求了,那就需要or關鍵字了。
mod是求餘運算,跟在其他課程中學習的並沒有什麼兩樣。第一個參數是除數,第二個參數是餘數。
3.具體類型查詢
這是content種的各個document,下面要對這個collection進行查詢
null大家應該很熟悉,就是空。在content中有一個document的post欄位是null。如果想尋找這個document,
如上查詢結果,除了post確實為null的document之外,沒有post地段的也都輸出了,這個肯定是不符合要求的,這時候exists關鍵字出現了。
mongodb中支援Regex,
比如尋找name是lunar或者是Lunar的document
flags(i)是可有可無的,有則表明忽略大小寫
我們可以尋找包含某些字串的,與常見的Regex沒有什麼不同。
尋找數組
先看collection的結構
如果你想尋找的字串要匹配不只一個欄位,可以使用$all來實現。
數組的匹配通常來說都是精確匹配的,這樣一來,如果數組中內容的順序不同,會導致不正確的尋找結果。
索引是 從零開始的,上述語句指名要查詢的數組的第二個元素是apple.
4嵌套結構的尋找
使用的collections
如果想尋找叫xin lau的document,則下列語句是對的
但是我們突然想給這個document增加一個middle欄位,那麼上面的查詢語句就立馬失效了。因為mongodb中都是精確匹配每個欄位的,那怎麼辦呢?明確指定欄位
上述是總結的一點點新的,覺得mongodb好像也不難,只是現在還是不熟悉它的一些奇妙的地方,覺得不像是一種資料庫,更像是一種函數功能很強大的工具。不過,後續可能還會繼續關注