Hike News
Hike News

MongoDB學習筆記-依條件搜尋文檔

條件搜尋文檔

  • find({字段:條件})括號中輸入的參數為json對象,為取文檔之條件

判斷字段名

example

1
2
3
4
5
6
//查找categories字段名為golang的結果
db.Articles.find(
{
"categories":"golang"
}
)


條件判斷

語法 符號
$gte >=
$gt >
$lte <=
$lt <
$eq ==
$ne !=
  • 須遵守以上語法規則進行查詢

語法

1
2
3
4
5
db.集合名.find(
{
字段:{條件判斷語法 : 條件}
}
);

example

1
2
3
4
5
6
// 查找rank值大於等於4的結果
db.Articles.find(
{
"rank":{$gte:4}
}
);


正則判斷

查找字段中含有某些字元的結果

語法

1
2
3
4
5
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
2
3
4
5
6
7
8
db.集合名.find(
{
字段1 : 條件1,
字段2 : 條件2,
...
...
}
);
  • 條件之間以,分隔
  • 返回滿足各個條件的結果

example

1
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
2
3
4
5
6
7
8
db.集合名.find(
{
$or:[{字段1:條件1},
{字段2:條件2},
{...},
{...},]
}
);
  • 各個條件放在一個列表中
  • 條件{}放在大括號裡,表示條件之間互不相干
  • 不同條件以 ,(逗號)區隔

example

1
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
2
3
4
5
6
7
8
9
10
11
db.集合名.find(
{
"字段名":{$in:[條件列表]}
}
);

db.集合名.find(
{
"字段名":{$nin:[條件列表]}
}
);

example

1
2
3
4
5
db.restaurant.find(
{
"food_material":{$in:["fish","pork","chicken"]}
}
);


抽出指定字段

在實際業務開發中,使用上述的方法查詢到特定的文檔時,
不可能將整份的文檔所含的字段全部抽取出來,
即便查詢的結果只有一個文檔,他也有可能包含數十甚至上百個字段
通常只會需要結果的特定某些字段,因此就需要對查詢結果的字段進行過濾

語法

1
db.集合名.find({查詢器},{篩選器})
  • 查詢器:如同前面所提到的各個查詢條件
  • 篩選器:指定抽出的字段,亦為ㄧjson對象
    • 篩選器的格式為:{字段1:true,字段2:1,_id:0}
      • 選擇特定的字段其值要是為true或1則被抽取出
      • _id字段默認會被抽取出,若不抽取則設為0(但文檔在更新時需要_id,所以不推薦將其設為0)

example

1
2
3
4
5
6
7
8
9
10
11
12
13
db.Class.find(
{
$or:[
{"math":{$gte:60}},
{"science":{$gte:80}},
]
},
{
"name":true,
"StudentID":1,
"_id":0,
}
);


查找特定字段(鍵)所有的值(distinct)

1
db.集合名.distinct("字段(鍵)名");
  • 返回一個列表,裡面含有所有的值

example

1
db.Articles.distinct("categories");

result

1
2
3
4
5
[
python,
golang,
mongodb,
]

查找特定字段(鍵)是否存在的文檔($exists)

1
2
3
db.restaurant.find(
{字段名 : { $exists : true/false } }
);

example

1
2
3
4
//查詢restaurant集合中存在CanSmoke鍵的所有文檔
db.restaurant.find(
{"CanSmoke" : {$exists:true}}
);

Reference:

http://komavideo.com/mongodb/index.html