Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB
MongoDB
  1. ค้นหาเอกสารใน MongoDB ที่มีอาร์เรย์ซ้อนที่มีข้อมูลและปรับรูปแบบผลลัพธ์

    ค้นหาเอกสารที่มีอาร์เรย์ซ้อนที่มีข้อมูลใน MongoDB บทความนี้สาธิตวิธีการค้นหาเอกสารใน MongoDB ที่มีอาร์เรย์ซ้อน (nested array) ที่มีข้อมูลจริง (ไม่ใช่ค่าว่าง) และปรับรูปแบบผลลัพธ์ให้อยู่ในรูปแบบที่ต้องการ โดยใช้ Aggregation Pipeline ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง สร้าง collect

  2. คำสั่ง MongoDB หาค่าซ้ำในอาร์เรย์

    ใช้ $where และฟังก์ชัน filter เพื่อหาเอกสารที่มีค่าเดิมซ้ำกันในอาร์เรย์ ให้ใช้ $where ร่วมกับฟังก์ชัน JavaScript filter() นับจำนวนครั้งที่ปรากฏ > db.demo188.insertOne({ ListOfData: [ { Data: 100 }, { Data: 200 }, { Data: 100 } ] }); คำสั่งหาเอกสารที่ Data=100 ปรากฏมากกว่า 1 ครั้ง: 1; } }) ผลลัพธ

  3. คำสั่ง MongoDB เรียงลำดับตามผลรวมของออบเจกต์ใน Inner Array

    ใช้ $unwind, $group, $sort, $project เพื่อเรียงลำดับเอกสารตามผลรวมของค่าเฉพาะใน inner array ให้แยกอาร์เรย์ คำนวณผลรวม เรียงลำดับ แล้วสร้างรูปแบบผลลัพธ์ > db.demo189.insertOne({ _id: 100, List: [ { Value: 10 }, { Value: 20 }, { Value: 10 } ] }); คำสั่ง aggregate คำนวณจำนวน Value=10 แล้วเรียงมากไปน

  4. MongoDB Aggregation ด้วยหลายคีย์ (Multiple Keys)

    ใช้ $group กับ _id แบบออบเจกต์ สามารถจัดกลุ่มและสรุปข้อมูลตามหลายคีย์พร้อมกันได้ โดยกำหนด _id เป็นออบเจกต์ที่มีหลายฟิลด์ > db.demo190.insertOne({ DueDate: ISODate(2020-01-01), Value: 10, Name: Chris }); คำสั่ง aggregate จัดกลุ่มตาม Name และปีของ DueDate: db.demo190.aggregate([ { $group: { _id: {

  5. วิธีดึงค่าจาก Cursor ใน MongoDB

    ใช้ hasNext() และ next() Cursor ที่ได้จาก find() สามารถวนลูปดึงข้อมูลทีละรายการด้วย hasNext() และ next() > db.demo191.insertOne({ EmployeeId: 1, EmployeeName: Chris Brown }); คำสั่งวนลูปดึงข้อมูลที่ EmployeeId = 1: var cursor = db.demo191.find({ EmployeeId: 1 }); while (cursor.hasNext()) { print(

  6. คำสั่ง MongoDB จัดกลุ่มหลายฟิลด์ด้วย Aggregation Framework

    ใช้ $group ระบุหลายฟิลด์ใน _id ใน $group สามารถระบุ _id เป็นออบเจกต์ที่ประกอบด้วยหลายฟิลด์ เพื่อจัดกลุ่มตามการรวมกันของฟิลด์เหล่านั้น > db.demo192.insertOne({ Name: Chris, Age: 22 }); คำสั่งจัดกลุ่มตาม Name และ Age: db.demo192.aggregate([ { $group: { _id: { Age: $Age, Name: $Name } } } ]) ผลลัพธ์

  7. วิธีปรับปรุงเวลาการรันคำสั่ง Query ใน MongoDB

    การสร้างดัชนี (Index) เป็นวิธีหลักในการเพิ่มประสิทธิภาพและลดเวลาการรันคำสั่ง Query ใน MongoDB โดยเฉพาะการสร้าง Unique Index ตัวอย่างสร้าง Unique Index บนฟิลด์ LastName > db.demo193.createIndex({LastName: 1}, {unique: true}); { createdCollectionAutomatically: true, numIndexesBefore: 1, numIndexes

  8. คำสั่ง MongoDB สืบค้นในออบเจกต์ของอาร์เรย์

    ใช้ Dot Notation เข้าถึงอาร์เรย์ซ้อน สามารถสืบค้นค่าในอาร์เรย์ที่อยู่ภายในออบเจกต์ซ้อนได้โดยใช้ dot notation ตรงไปตรงมา > db.demo194.insertOne({ _id: 101, details: { otherDetails: { List1: [MongoDB, MySQL], List2: [Java], List3: [MongoDB, C] } } }); คำสั่งค้นหาที่ List1 มี MongoDB: db.demo194.fin

  9. วิธีนับเอกสารที่ตรงกับสองฟิลด์ใน MongoDB

    ใช้ count() พร้อมเงื่อนไขหลายอย่าง เมธอด count() ใช้นับจำนวนเอกสารที่ตรงกับเงื่อนไขที่ระบุ หลายฟิลด์พร้อมกัน > db.demo175.insertOne({EmployeeName: Bob, isMarried: YES}); คำสั่งนับที่ EmployeeName=Mike และ isMarried=YES: db.demo175.count({ EmployeeName: Mike, isMarried: YES }) ผลลัพธ์: 1

  10. การดึงสตริงย่อย (Substring) ใน MongoDB Aggregate

    ใช้ $substr ใน $project ตัวดำเนินการ $substr (หรือ $substrBytes/$substrCP) ใช้ดึงส่วนของสตริง ตำแหน่งเริ่มต้นและความยาว > db.demo176.insertOne({ProductName: PRODUCT-102}); คำสั่งดึง 7 ตัวอักษรแรก: db.demo176.aggregate([ { $project: { ProductName: { $substr: [$ProductName, 0, 7] } } } ]) ผลลัพธ์:

  11. คำสั่ง MongoDB เพิ่มเอกสารในคอลเลกชันที่มีอยู่แล้ว

    ใช้ $push เพิ่มอิลิเมนต์ในอาร์เรย์ ตัวดำเนินการ $push ใช้เพิ่มเอกสารใหม่เข้าไปในอาร์เรย์ของเอกสารที่มีอยู่แล้ว > db.demo177.insertOne({ Id: 101, details: [ { StudentName: Chris, Scores: [67, 71, 74], SubjectName: [MySQL, Java] } ] }); คำสั่งเพิ่มรายการนักเรียนใหม่ในอาร์เรย์ details: db.demo177.up

  12. คำสั่ง MongoDB ดึงบันทึกวันที่ (ISODate) ในช่วงเวลา

    ใช้ $redact กรองตามช่วงเวลา ตัวดำเนินการ $redact ใช้กรองเอกสารตามเงื่อนไขซับซ้อน เช่น ช่วงเวลาของชั่วโมงใน ISODate > db.demo178.insertOne({DueDate: new ISODate(2019-01-10T06:18:20.474Z)}); คำสั่งดึงเอกสารที่ชั่วโมงอยู่ระหว่าง 6-9 น.: db.demo178.aggregate([ { $redact: { $cond: { if: { $and: [ { $g

  13. การค้นหาอิลิเมนต์ล่าสุดในอาร์เรย์ข้ามทุกเอกสาร MongoDB

    ใช้ Aggregate Pipeline: $unwind, $sort, $limit เพื่อหาอิลิเมนต์ล่าสุด (ค่า Id สูงสุด) ในอาร์เรย์ข้ามทุกเอกสาร ให้แยกอาร์เรย์ เรียงลำดับ จำกัดจำนวน แล้วจัดกลุ่ม > db.demo179.insertOne({ Name: Chris, Details: [ { Id: 101, Subject: MongoDB }, { Id: 102, Subject: MySQL } ] }); คำสั่ง aggregate หา 2 ร

  14. การจับคู่เอกสาร MongoDB ที่ฟิลด์ไม่มีค่าในอาร์เรย์

    ใช้ $nin (Not In) ตัวดำเนินการ $nin ใช้จับคู่เอกสารที่ฟิลด์อาร์เรย์ไม่มีค่าใดค่าหนึ่งจากค่าที่ระบุ > db.demo180.insertOne({Scores: [80, 90, 110]}); คำสั่งค้นหาเอกสารที่ Scores ไม่มี 110 และ 90: db.demo180.aggregate({ $match: { Scores: { $nin: [110, 90] } } }).pretty(); ผลลัพธ์คืนเฉพาะเอกสารที่ Sc

  15. คำสั่ง MongoDB ค้นหาบันทึกวันที่ด้วยเดือนและวันอย่างเดียว

    ใช้ $where และฟังก์ชัน JavaScript เพื่อค้นหาตามเดือนและวันโดยไม่สนใจปี ให้ใช้ $where ร่วมกับเมธอด getMonth() และ getDate() ของ Date object > db.demo181.insertOne({ShippingDate: new ISODate(2020-01-10)}); คำสั่งค้นหาเดือน มกราคม (0) หรือวันที่ 10: db.demo181.find({ $where: function() { return this

  16. คำสั่ง MongoDB เลือกฟิลด์หนึ่งถ้าอีกฟิลด์เป็น null

    ใช้ $ifNull ใน Aggregate ตัวดำเนินการ $ifNull คืนค่าฟิลด์แรกที่ไม่ใช่ null ใช้ใน $project ของ aggregate > db.demo182.insertOne({FirstName: Chris, LastName: null}); คำสั่งเลือก FirstName ถ้าไม่ใช่ null มิฉะนั้นเลือก LastName: db.demo182.aggregate([ { $project: { Result: { $ifNull: [$FirstName, $La

  17. การสืบค้น Subdocument แสดงผลในบรรทัดเดียว MongoDB

    ใช้ $unwind แยก Subdocument เพื่อแสดง subdocument แต่ละตัวในบรรทัดแยกกัน ให้ใช้ $unwind ใน aggregate แล้วประมวลผลด้วยฟังก์ชัน JavaScript > db.demo183.insertOne({ _id: 110, DueDate: ISODate(2020-02-04), ProductDetails: [ { ProductName: Product-1, isAvailable: true }, { ProductName: Product-2, isAv

  18. คำสั่ง MongoDB นับความถี่ของทุกอิลิเมนต์ในอาร์เรย์

    ใช้ $unwind และ $group ร่วมกับ $sum เพื่อนับความถี่ของแต่ละค่าในอาร์เรย์ข้ามหลายเอกสาร ให้ใช้ pipeline: $unwind แยกอาร์เรย์, $group นับแต่ละค่า, แล้วรวมผลลัพธ์ > db.demo184.insertOne({Names: [Chris, David, Bob]}); คำสั่งนับความถี่: db.demo184.aggregate([ { $unwind: $Names }, { $group: { _id:

  19. การนับจำนวนอิลิเมนต์ในอาร์เรย์ด้วย MongoDB

    ใช้ $size ใน Aggregate ตัวดำเนินการ $size ใช้นับจำนวนอิลิเมนต์ในอาร์เรย์ ร่วมกับ $project ใน aggregate framework > db.countNumberOfElementsDemo.insertOne({UserMessage: [Hi, Hello, Bye, Awesome]}); คำสั่งนับจำนวนอิลิเมนต์: > db.countNumberOfElementsDemo.aggregate({ $project: { NumberOfElements:

  20. ความแตกต่างระหว่าง MySQL และ MongoDB

    MySQL vs MongoDB MySQL เป็นฐานข้อมูลเชิงสัมพันธ์ (Relational) ส่วน MongoDB เป็น NoSQL Database ตารางเปรียบเทียบหลัก ลำดับหัวข้อMySQLMongoDB 1เจ้าของ/ผู้พัฒนาOracleMongoDB Inc. 2การจัดเก็บข้อมูลรูปตาราง (Table/Row/Column)เอกสาร (Document/Collection/Field) 3ภาษา/โครงสร้างSQL, Structured Query Lang

Total 1351 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:40/68  20-คอมพิวเตอร์/Page Goto:1 34 35 36 37 38 39 40 41 42 43 44 45 46