前面幾篇已經說明完了新增、修改、刪除,最後咱們新手村之旅的尾巴將要說明搜尋,這個功能應該是我們最常會使用到的,請好好的學習。
find
方法基本說明find
的搜尋條件(含搜尋故事)P.S +u^8
~
find
方法基本說明mongodb
使用find
來進行搜尋,它的第一個參數決定要那些資料,而第二個參數則決定要返回那些key
。
基本的使用範例如下,首先我們先建立一些資料。
db.user.insert({"name":"mark","id":"1","age":20});
db.user.insert({"name":"steven","id":"2","age":20});
db.user.insert({"name":"jj","id":"3","age":25});
db.user.insert({"name":"bb","id":"4","age":20});
我們想尋找到name
為mark
的document
,並且我們希望回傳值只回傳id
這個key
就好,搜尋指令如下。
db.user.find({"name":"mark"},{"id" :1 })
搜尋結果如下,它只回傳了key id
的內容,但是可以看到_id
也被回傳回來,因為在默認情況下_id
這個key
會自動被傳回來,如果真的不想它也回傳回來可以下達下列搜尋指令。
db.user.find({"name":"mark"},{"id" : 1,"_id":0})
find
的搜尋條件 ~這邊我們將要說明find
常用搜尋條件,and、or、大於等於、大於、小於、小於等於、包含、不包含,有了這些條件我們就可以更方便的尋找你所需要的document
。
這邊簡單的整理成一張表來對應操作符號。
條件 | 操作符號 |
---|---|
AND | $and ,另一種方法也可以直接在query 中下{"key1","value1","key2":"value2"} |
OR | $or |
NOT | $not |
NOR | $nor |
大於 | $gt |
大於等於 | $gte |
小於 | $lt |
小於等於 | $lte |
包含 | $in |
不包含 | $nin |
我們接下來會先產生幾筆測試資料,再來測試幾個搜尋故事。
測試資料如下,這是一組使用者資訊,裡面記載了使用者的名稱、年紀、粉絲數以及喜歡數。
//collection為user
{"id":"1","name":"mark","age":25,"fans":100,"likes" : 1000}
{"id":"2","name":"steven","age":35,"fans":220,"likes" : 50}
{"id":"3","name":"stanly","age":30,"fans":120,"likes" : 33}
{"id":"4","name":"max","age":60,"fans":500,"likes" : 1000}
{"id":"5","name":"jack","age":30,"fans":130,"likes" : 1300}
{"id":"6","name":"crisis","age":30,"fans":130,"likes" : 100}
{"id":"7","name":"landry","age":25,"fans":130,"likes" : 100}
這時就需要$gte
、$lt
和and
一起用囉,這有兩種寫法。
//這是第一種
db.user.find(
{"age":{"$gte":30,"$lt":60},
"fans":{"$gte" : 200}})
//這是第二種
db.user.find(
{"$and":[{"age":{"$gte":30,"$lt":60}},{"fans":{"$gte" : 200}}]})
結果如下,應該只找到steven
這位仁兄。
fans
小於等於100,或是likes
小於100的人。這時就需要用到or
和$lt
、$lte
囉。
db.user.find(
{"$or": [{"fans":{"$lte":100}},{"likes":{"$lt":100}}]})
結果如下,應該是找到三位mark、steven、stanly
。
age
為25、60
的人。這時可用$in
。
db.user.find({"age":{"$in":[25,60]}})
結果如下,應該是找到三位mark、max、landry
。
age
不為25、60
的人,並且只給我它的id
就好。這時可用$nin
。
db.user.find({"age":{"$nin":[25,60]}},{"id":1})
結果如下~應該是會找到4位。
likes
小於等於100的人(使用$not
)這邊事實上可以很簡單的用$lte
,但因為我們要介紹一下$not
所以會寫的比較麻煩點兒,
而真正可以發揮$not
功能時,是在和正規表達式聯合使用時,用來查找不匹配的document
。
來解釋一下這段,首先它會尋找所有likes
大於100
的document
,但這時在配個$not
就變成完全相反會變成小於等於喔。
db.user.find({"likes":{"$not":{"$gt":100}}})
所以結果應該是找到4筆。
fans
大於100人且likes
大於500。這邊我們可以用$nor
來尋找,它的意思就是選出所有不滿足條件的document
。
db.user.find({"$nor":[{"fans":{"$lt":100}},{"likes":{"$lt":100}}]})
今天說明了很多的條件符號,可以簡單分成以以下兩類,邏輯符號與比較符號,運用這兩種符號就可以針對很多種情況下進行搜尋,當然還不只這些,明天將會繼續,我累了……。
操作符號 | |
---|---|
邏輯符號 | $and 、$or 、$or 、not |
邏輯符號用法 | {$xxx: [ { expression1 },{ expression2 }]} { field: { $not: { <operator-expression> } } } |
比較符號 | $gt 、$gte 、$lt 、$lte 、$in``$nin |
比較符號用法 | {field: {$gt: value} } { field: { $in($nin): [<value1>, <value2>, ... <valueN> ] } } |