MongonDB學習筆記(一)查詢

2021-07-15 05:18:01 字數 3213 閱讀 8610

在前面增刪改查的例子裡看到幾個不知道的函式,這一節來看看他們都是什麼意思。mongondb聽起來很高大上,單終歸是乙個資料庫,增刪改查是核心功能,這一節重點看看他的查詢包括符合查詢。其實到這裡,我感受最深的是mongondb作為關係性資料庫的替代品還是很好上手的,至少比redis更容易讓我理解。

首先往資料庫集合裡面插入幾條資料。

測試資料:

> db.users.insert()

> db.users.insert()

> db.users.insert()

> db.users.find().pretty()

pretty() 方法是對查詢結果進行格式化

查詢的時候可以帶上查詢條件,那具體的查詢條件怎麼使用?

等於等於操作直接使用 這樣的文件形式即可

> db.users.find()

>

大於

語法: }

> db.users.find(})

>

大於等於

語法: }

> db.users.find(})

小於

語法:  }

> db.users.find(})

小於等於

語法: }

> db.users.find(})

不等於

語法: }

> db.users.find(})

且操作 and

語法:

> db.users.find(,username:"mongo"})

> db.users.find(})

或操作 or

語法: , ] } 將or條件的所有 都放在 $or 的value中(陣列)

> db.users.find(,]})

複雜條件查詢

如何將所有的條件都連起來用呢?

比如我們想要這樣查詢 like>=888 && (username=」mongo」 or username=」spring」)

由於上面的資料只有三條, 我們知道 like>=888 只有 mongo 和 redis 這兩條資料滿足條件, 後面的username=」mongo」 or username=」spring」 又有 mongo和 spring 滿足條件, 這兩個and操作之後 就只剩下 mongo 這條資料滿足條件了。 所以最終應該查出一條mongo的document.

> db.users.find(,$or:[,]})

>

find() 其他用法

projection

mongodb中 projection 意味著顯示你希望看到的字段而非所有的字段都顯示,這是什麼意思呢?

比如: 我們的測試資料裡面有那麼多的字段: username,likes,tags,author,url 而我們經常要用到的就只有 username 和 likes 那麼就顯示這兩個欄位就好了,其他的字段就別顯示出來了。

find({},) find的第二個引數,key為要顯示或隱藏的字段,value為1表示顯示,0表示隱藏,看著也很簡單,試一下吧

> db.users.find({},)

>

limit, skip, sort

為了更好的測試分頁的效果,新建乙個集合,並插入30條資料

> for(var i=0; i<30; i++));

... }

writeresult()

> db.pages.find()

type "it"

for more

> db.pages.find().limit(5)

可以發現,如果使用 limit方法的話會顯示整個集合的所有文件。 指定了 limit 之後, 顯示具體的條數,上文中,limit(5) 表示, 顯示5條文件。

limit方法除外,還有乙個 skip 方法,skip也是接受乙個整型的引數,表示查詢結果跳過多少個文件。

例如上面插入的30條記錄中,我們要顯示18-22條記錄,那麼就應該使用

db.pages.find().skip(18).limit(5)

> db.pages.find().skip(18).limit(5)

skip和limit的組合就能做到分頁的功能了。但是如果資料量很大,理論上分頁就會變得很慢了,比如有一億條資料,要拿最後一頁。那skip的資料量就很多很多了。這樣就會變得比較慢。話說回來,有誰會看資料看到最後的幾頁?正常都是看前面幾頁資料,所以,skip和limit實現分頁是可以接受的。

在mongodb中,如果要對查詢結果排序,那麼需要使用sort方法。sort方法接收乙個文件引數。也就是的形式。其中,key表示要排序的字段,value的可取值為 1 / -1 。1表示公升序asc,-1表示降序desc。話不多說,直接上例子:

> db.pages.find().sort()

type "it"

for more

這個是對val這個key進行逆序排序,所以value取值為-1。 那value值為1的話,就變成公升序了。

> db.pages.find().sort()

type "it"

for more

>

那如果要對多個值進行組合排序呢? 就好比如對於我們最初的例子 users 集合。 要對users集合進行排序。其中 按照likes公升序, 按照username降序。為了達到我們的效果,我們再往users集合裡面插入兩條資料

> db.users.insert()

> db.users.insert()

下面是執行結果,注意觀察 likes為888的兩個文件。發現username逆序排序了。至此,說明我們的sort實驗成功了。

> db.users.find().sort().pretty()

>

刷題筆記 一 查詢

1 二分查詢的前提是有序,二分查詢要求元素有序 順序儲存 2 二分查詢的最壞時間複雜度為o log n 例項 有序表中有1000個元素,則用二分查詢查詢元素x最多需要比較10次 解析 二分查詢的最壞時間複雜度為o log n 把n等於1000帶入得到,log1000 9,10,取整那麼至少103 用...

多合一查詢

create table student num varchar 20 name varchar 20 subject varchar 10 score float insert student select 001 姓名1 英語 78.00 insert student select 001 姓名...

簡易ORM Sqlite框架 一 查詢

獲取模型 param cursor param classz param return public listgetmodel final cursor cursor,classclassz class c classz field fields c.getdeclaredfields method...