.NET 雲原生架構師訓練營(模組二 基礎鞏固 MongoDB 寫入和查詢)--學習筆記

MingsonZheng發表於2021-01-02

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) 。

相關文章