標籤:style blog http color io strong sp 資料 on
MongoBD的查詢說白了就是一個find()方法。But 還是有點小複雜。來吧
(1) 查詢所有的資料:db.集合名.find(); 這沒啥說的。
(2) 查詢第一條資料:db.集合名.findOne(); 也沒啥說的。
(3) 條件查詢:db.集合名.find(查詢條件),查詢條件也是一種json格式的東東。所以理解json對於學Mongodb真的很重要。
如下:查詢name為zhangsan的記錄:
(4) 組合條件查詢:db.collection名.find({查詢條件1,查詢條件2,...}), 還是上面那個例子,現在假設要查詢name為zhangsan,
age為23: db.customer.find({"name":"zhangsan", "age":23})
(5) 返回指定的欄位:比如在關係型資料庫中 select * ...是返回所有欄位,select 欄位1, 欄位2....是返回兩個欄位,那麼在Mong
odb中怎樣做到返回指定的欄位呢? 格式:db.collection名.find({查詢條件1,查詢條件2,...},{欄位1:1, 欄位2:1,....}),
其中1代表顯示,如果是0就是不顯示。預設是全部顯示的。如果不想顯示_id,必須顯示的將 _id的是否顯示置為0,如下:
(6) 範圍查詢:先看看比較操作符吧。$lt(<) , $gt(>), $lte(<=), $gte(>=), $ne(!=). 執行個體如下:
(7) $in查詢:查詢值在指定的集合內進行匹配.和SQL中的 in 差不多。如下:
查詢名字為zhangsan或者是lisi的使用者的資訊:
(8) $nin查詢:對不在指定集合條件的記錄進行匹配。和SQL中 not in類似,比如現在要查詢name不是zhangsan或者lisi的資訊:
db.customer.find({"name":{"$nin":["zhangsan", "lisi"]}})
(9) $or查詢:就是 或者 的意思嘛,上樣本:查詢name為zhangsan 或者 age 為13的使用者的資訊:
db.customer.find({"$or":[{"name":"zhangsan"}, {"age":13}]}),如下所示:
再寫一個稍微複雜一點的,查詢_id在 001或002中, 或者name為zhaoliu的使用者的資訊:
db.customer.find({"$or":[{"_id":{"$in":["001", "002"]}}, {"name":"zhaoliu"}]}).如下所示:
(10)$not查詢: $not和$nin的區別是$nin是只能用到集合上.$not範圍廣點。
查詢_id不在001和002中的使用者的資訊:db.customer.find({"_id":{"$not":{"$in":["001", "002"]}}})
(11)null:現在collection中有如下document:
從可看到有些document中有sex,有些沒有,有些為null, 輸入如下命令:db.customer.find({"sex":null}),結果如下:
從結果可以看出,不但sex為null的查詢出來了,而且沒有sex欄位的document也查詢出來了。如果要找到age為null的,還應該在
這個基礎上必須限制出現age.那怎麼辦呢?先放一放,說完下面這一條就出來了。
(12)$exists : 判斷欄位是否存在.比如,查詢所有存在name欄位的記錄:db.customer.find({"name":{"$exists":true}}), 查
詢所有的不存在sex欄位的記錄:db.customer.find({"sex":{"$exists":false}}). 現在解決(11)中的問題:
不過有一點覺得很奇怪:為什麼不能像下面這樣寫?
其實仔細想想也就明白了:因為條件的寫法是遵循json格式,在json中,鍵不能重複,當重複的時候,後者會將前者覆蓋,我想大概
就是這個原因吧。
(12)Regex: 直接上樣本:查詢name中包含ang的使用者的資訊:db.customer.find({"name":/ang/})
查詢那麼以 Z 開頭的使用者的資訊:db.customer.find({"name":/^z/})
查詢以an結尾的使用者的資訊:db.customer.find({"name":/an$/})
Mongodb(五):Mongodb的增刪改查(3)----查詢詳解(上)