條件搜尋文檔
find({字段:條件})
括號中輸入的參數為json對象,為取文檔之條件
判斷字段名
example1
2
3
4
5
6//查找categories字段名為golang的結果
db.Articles.find(
{
"categories":"golang"
}
)
條件判斷
語法 | 符號 |
---|---|
$gte | >= |
$gt | > |
$lte | <= |
$lt | < |
$eq | == |
$ne | != |
- 須遵守以上語法規則進行查詢
語法
1 | db.集合名.find( |
example1
2
3
4
5
6// 查找rank值大於等於4的結果
db.Articles.find(
{
"rank":{$gte:4}
}
);
正則判斷
查找字段中含有某些字元的結果
語法
1 | db.集合名.find( |
example:1
2
3
4
5
6
7
8
9//查找title字段中含有18的結果
db.Articles.find(
{"title":/18/}
);
//查找title字段中開頭為This的結果
db.Articles.find(
{"title":/^This/}
);
多條件搜尋
and 運算
1 | db.集合名.find( |
- 條件之間以,分隔
- 返回滿足各個條件的結果
example1
2
3
4
5
6
7
8//查詢tag字段為food,且title字段含有beef,且rank字段大於等於5之結果
db.Articles.find(
{
"tag":"food",
"title":/beef/,
"rank":{$gte:5},
}
);
or運算($or)
1 | db.集合名.find( |
- 各個條件放在一個列表中
- 條件{}放在大括號裡,表示條件之間互不相干
- 不同條件以
,
(逗號)區隔
example1
2
3
4
5
6
7
8//查找math大於60,或science大於90,或gender為female的結果
db.Class.find(
{
$or:[{math:{$gte:60}},
{science:{$gte:90}},
{gender:"female"},]
}
);
$in 及 $nin
- $in 返回查詢字段之值位於條件列表中的結果
- $nin 返回查詢字段之值不位條件於列表中的結果
1 | db.集合名.find( |
example1
2
3
4
5db.restaurant.find(
{
"food_material":{$in:["fish","pork","chicken"]}
}
);
抽出指定字段
在實際業務開發中,使用上述的方法查詢到特定的文檔時,
不可能將整份的文檔所含的字段全部抽取出來,
即便查詢的結果只有一個文檔,他也有可能包含數十甚至上百個字段
通常只會需要結果的特定某些字段,因此就需要對查詢結果的字段進行過濾
語法
1 | db.集合名.find({查詢器},{篩選器}) |
- 查詢器:如同前面所提到的各個查詢條件
- 篩選器:指定抽出的字段,亦為ㄧjson對象
- 篩選器的格式為:
{字段1:true,字段2:1,_id:0}
- 選擇特定的字段其值要是為true或1則被抽取出
- _id字段默認會被抽取出,若不抽取則設為0(但文檔在更新時需要_id,所以不推薦將其設為0)
- 篩選器的格式為:
example1
2
3
4
5
6
7
8
9
10
11
12
13db.Class.find(
{
$or:[
{"math":{$gte:60}},
{"science":{$gte:80}},
]
},
{
"name":true,
"StudentID":1,
"_id":0,
}
);
查找特定字段(鍵)所有的值(distinct)
1 | db.集合名.distinct("字段(鍵)名"); |
- 返回一個列表,裡面含有所有的值
example1
db.Articles.distinct("categories");
result1
2
3
4
5[
python,
golang,
mongodb,
]
查找特定字段(鍵)是否存在的文檔($exists)
1 | db.restaurant.find( |
example1
2
3
4//查詢restaurant集合中存在CanSmoke鍵的所有文檔
db.restaurant.find(
{"CanSmoke" : {$exists:true}}
);