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

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

# 2.5.3 MongoDB -- 寫入和查詢 - 寫入 - 查詢 - 查詢操作符 - 邏輯操作符 - 其他 - 巢狀物件 - 陣列 - 遊標方法 ## 寫入 [https://docs.mongodb.com/manual/tutorial/insert-documents/](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/](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](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.