2.5.3 MongoDB -- 寫入和查詢
- 寫入
- 查詢
- 查詢操作符
- 邏輯操作符
- 其他
- 巢狀物件
- 陣列
- 遊標方法
寫入
https://docs.mongodb.com/manual/tutorial/insert-documents/
- insertOne
- insertMany
db.questions.insert(
{
"_id":"003",
"title":"第三個問題",
"view":0,
"isDeleted":false,
"content":"第三個問題",
"status":"open",
"tags":["c#"],
"answers":[
{"content":"回答1"},
{"content":"回答2"},
{"content":"回答3"}
]
}
)
db.questions.insertMany(
[
{
"_id":"004",
"title":"第三個問題",
"view":0,
"isDeleted":false,
"content":"第三個問題",
"status":"open",
"tags":["c#"],
"answers":[
{"content":"回答1"},
{"content":"回答2"},
{"content":"回答3"}
]
},
{
"_id":"005",
"title":"第三個問題",
"view":0,
"isDeleted":false,
"content":"第三個問題",
"status":"open",
"tags":["c#"],
"answers":[
{"content":"回答1"},
{"content":"回答2"},
{"content":"回答3"}
]
}
]
)
查詢
https://docs.mongodb.com/manual/reference/operator/query/
db.users.find(
{ age: { $gt: 18 } }, // 查詢條件
{ name: 1, address: 1 } // 查詢欄位
).limit(5)
db.getCollection('questions').find({"title":"第三個問題"},{"title":1,"content":1})
db.getCollection('questions').find({},{"title":1,"content":1}).skip(1).limit(2)
查詢操作符
Name | Description |
---|---|
$eq | 等於 |
$gt | 大於 |
$gte | 大於等於 |
$lt | 小於 |
$lte | 小於等於 |
$ne | 不等於 |
$in | 存在於 |
$nin | 不存在於:一般用於陣列 |
// 大於等於
db.getCollection('questions').find({"view":{$gte: NumberInt(0)}})
// 存在於
db.getCollection('questions').find({"tags":{$in: ["c#"]}})
邏輯操作符
Name | Description |
---|---|
$and | 滿足多個條件 |
$or | 滿足多個條件中的一個 |
$not | 不匹配,或者欄位不存在 |
$nor | 多個條件,一個都不滿足 |
// 滿足多個條件中的一個
db.getCollection('questions').find({$or:
[
{"tags":{$in: ["c#"]}},
{"view":{$gt:2}}
]
})
db.getCollection('questions').find({"view":{"$gt": 5}})
// 不匹配,或者欄位不存在(取反)
db.getCollection('questions').find({"view": {$not: {"$gt": 5}}})
// 多個條件,一個都不滿足
db.getCollection('questions').find({$nor: [{"view":{"$gt": 5}}]})
其他
Name | Description |
---|---|
$exists | 存在某個欄位 |
$type | 欄位的型別 |
// 存在某個欄位則顯示
db.getCollection('questions').find({"best": {$exists:1}})
// 不存在某個欄位則顯示
db.getCollection('questions').find({"best": {$exists:0}})
// 欄位的型別,16代表32-byte integer
db.getCollection('questions').find({"view": {$type: 16}})
https://mongoing.com/docs/reference/bson-types.html
巢狀物件
db.getCollection('questions').find({"best.content":{$eq: "最好的答案"}})
陣列
Name | Description |
---|---|
$all | 所有元素匹配,匹配簡單型別陣列 |
$elemMatch | 用於匹配 object 陣列 |
$size | 長度條件 |
db.getCollection('questions').find({"tags": {$in: ["c#"]}})
db.getCollection('questions').find({"tags": {$nin: ["c#"]}})
// 都必須包含
db.getCollection('questions').find({"tags": {$all: ["c#", "asp.net core"]}})
// 大小為2
db.getCollection('questions').find
// 包含 回答1 的陣列
db.getCollection('questions').find({"answers": {$elemMatch: {"content": "回答1"}}})
db.getCollection('questions').find({"answers": {$elemMatch: {"content": {$gte: "回答1"}}}})
遊標方法
只在 mongo shell 中有效,其他語言版本 sdk 無效
- skip
- limit
- count
- pretty 美化
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。
歡迎轉載、使用、重新發布,但務必保留文章署名 鄭子銘 (包含連結: http://www.cnblogs.com/MingsonZheng/ ),不得用於商業目的,基於本文修改後的作品務必以相同的許可釋出。
如有任何疑問,請與我聯絡 (MingsonZheng@outlook.com) 。