# 第一週主線任務 ###### 資料欄位 ``` 貼文集合欄位介紹 - name:貼文姓名 - image:貼文圖片 - content:貼文內容 - likes:按讚數 - comments:留言數 - createdAt:發文時間 - type:貼文種類[friend(摯友)、group(社團)] - tags:貼文標籤 ``` --- ### 課程範圍 1. 搜尋 name 欄位為 "Ray Xu" 的 document 列表 ```javascript! db.posts.find({"name":"Ray Xu"}) ``` 2. 新增一筆 document,請全部欄位皆填寫 ```javascript! db.posts.insertOne({ name:"Ching", image:"http://dummyimage.com/197x100.png/cc0000/ffffff", content:"ante vivamus tortor", likes: 4235, comments: 4562, createdAt:"2023-11-29 08:53:44 UTC", type:"friend", tags:["心情"] }) ``` 3. 新增多筆 document,請全部欄位皆填寫 ```javascript! db.posts.insertMany([{ name: "黑崎一護", image: null, content: "你說甚麼!!", likes: 556, comments: 965, createdAt: "2022-04-22 21:53:44 UTC", type: "friend", tags: ["幹話", "謎因"], },{ name:"艾倫", image:"http://dummyimage.com/197x100.png/cc0000/ffffff", content:"萊納你坐啊", likes: 7786, comments: 1246, createdAt:"2022-06-29 08:53:44 UTC", type:"friend", tags:["幹話", "謎因"] }]) ``` 4. 修改一筆 document,filter 條件請用 `_id` 指定其中一筆資料,`content` 欄位調整為`測試資料` ```javascript! db.posts.updateOne( { _id: ObjectId("662118a400198bb6c3fddd77"), }, { $set: { content: "測試資料", }, } ); ``` 5. 修改多筆 `name` 欄位為 ``"Ray Xu"`` 的 document 列表,`content` 欄位都調整為`哈哈你看看你` ```javascript! db.posts.updateMany( { name: "Ray Xu", }, { $set: { content: "哈哈你看看你", }, } ); ``` 6. 刪除一筆 document,filter 條件請用 `_id` 任意指定其中一筆資料 ```javascript! db.posts.deleteOne({ _id: ObjectId("662118a400198bb6c3fddd7b"), }); ``` 7. 刪除多筆 document,filter 條件請用 `type` 為 `group` 的值,刪除所有社團貼文 ```javascript! db.posts.deleteMany({ type: "group" }) ``` 8. 刪除多筆 document,filter 條件為以下條件 a. `name`:``"Ray Xu"`` b. `likes`: 500(含) 個讚以下 ```javascript! db.posts.deleteMany({ $and: [{ name: "Ray Xu", likes: {$lte: 500 } }] }); ``` 9. 查詢全部 `posts` 的 document 列表 ```javascript! db.posts.find({}) ``` 10. 關鍵字搜尋 `name` 裡面含有 `o` 的 document 列表 ```javascript! db.posts.find({ name: {$in : [/o/]} }) ``` 11. 查詢`name` 欄位為 `"Ray Xu"` ,filter 篩選出介於 500~1000(含) 個讚(大於等於 500、小於等於 1000) ```javascript! db.posts.find({ name: "Ray Xu", $and: [{ likes: { $gte: 500, $lte: 1000 } }] }); ``` 12. 查詢 `comments` 有大於等於 500 以上的 document 列表 ```javascript! db.posts.find({ comments: { $gte:500 } }) ``` 13. 查詢 `tags` 欄位,有 `謎因` **或(or)** `幹話` 的 document 列表 ```javascript! db.posts.find({ tags: {$in: ['謎因', '幹話']} }) ``` 14. 查詢 `tags` 欄位,有 `幹話` 的 document 列表,需隱藏 `_id` 欄位 ```javascript! db.posts.find( { tags: { $in: ["幹話"] }, }, { _id: 0, } ); ``` 15. 請嘗試用 Mongo Shell 指令刪除全部 Documents ```javascript! db.posts.deleteMany({}) ``` ### 自主研究題 1. posts 所有 document 數量為?(回傳數字) ```javascript! db.posts.find().count() ``` 2. 查詢 `name` 為 `Ray Xu` 的 document 列表,排序為由新到舊 ```javascript! db.posts.find({ name: "Ray Xu" }).sort({ createdAt: -1 }); ``` 3. 請查詢 `name` 為 `Ray Xu` 的 document 列表,顯示前 30 筆資料 ```javascript! db.posts.find({ name: "Ray Xu" }).limit(30); ``` 4. 請查詢 `name` 為 `Ray Xu` ,顯示100(含) 個讚以上的前 30 筆 document 列表,時間排序由新到舊 ```javascript! db.posts .find({ name: "Ray Xu", likes: { $gte: 100 } }) .limit(30) .sort({ createdAt: -1 }); ``` 5. 請查詢 `comments` 超過 `100` 的 document 列表,跳過前 30 筆資料,再顯示 30 筆資料 ```javascript! db.posts.find({ name: "Ray Xu" }).skip(30).limit(30); ``` 6. 尋找超夯熱門貼文,請查詢 `likes` **且(and)** `comments` 都 `1,500(含)`以上的 document 列表 ```javascript! db.posts.find({ $and: [{ likes: { $gte: 1500 }, comments: { $gte: 1500 } }], }); ``` 7. 尋找普通熱門貼文,請查詢 `likes` **或(or)** `comments` , `1,000(含)`以上 的 document 列表 ```javascript! db.posts.find({ $or: [{ likes: { $gte: 1000 }, comments: { $gte: 1000 } }], }); ``` 8. 查詢 `image` 欄位為 `null` 的 document 列表 ```javascript! db.posts.find({ image: null }); ``` 9. 隨意找一筆 document 資料,將 `tags` 欄位裡的陣列,新增一個新 tags 為 `遊記` ```javascript! db.posts.updateOne( { _id: ObjectId("6621cefe2bd3230ad42bb4e9"), }, { $push: { tags: "遊記" }, } ); ``` 10. 將所有 `tags` 陣列裡的 `感情` 都移除 ```javascript! db.posts.updateMany( { tags: { $in: ["感情"] }, }, { $pull: { tags: "感情", }, } ); ```