เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

เพื่อนๆ เปิดตัวอีกคอร์สครับ "ฐานข้อมูล" จะมีขึ้นในวันพรุ่งนี้ ดังนั้นเราจึงจัดบทเรียนแบบเปิดแบบดั้งเดิมซึ่งคุณสามารถรับชมได้ ที่นี่. ครั้งนี้เราได้พูดคุยเกี่ยวกับฐานข้อมูล MongoDB ยอดนิยม: เราได้ศึกษารายละเอียดปลีกย่อยบางประการ ดูที่พื้นฐานของการดำเนินการ ความสามารถ และสถาปัตยกรรม นอกจากนี้เรายังได้กล่าวถึงกรณีผู้ใช้บางกรณีด้วย

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

การสัมมนาผ่านเว็บถูกจัดขึ้น อีวาน เบลท์หัวหน้าฝ่ายพัฒนาเซิร์ฟเวอร์ที่ Citymobil

คุณสมบัติ MongoDB

MongoDB เป็น DBMS เชิงเอกสารแบบโอเพ่นซอร์สที่ไม่จำเป็นต้องมีคำอธิบายของสคีมาตาราง จัดเป็น NoSQL และใช้ BSON (binary JSON) สามารถปรับขนาดได้ทันที เขียนด้วยภาษา C++ และรองรับไวยากรณ์ JavaScript ไม่มีการสนับสนุน SQL

MongoDB มีไดรเวอร์สำหรับภาษาการเขียนโปรแกรมยอดนิยมมากมาย (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby ฯลฯ) นอกจากนี้ยังมีไดรเวอร์ที่ไม่เป็นทางการและสนับสนุนโดยชุมชนสำหรับภาษาการเขียนโปรแกรมอื่นๆ

มาดูคำสั่งพื้นฐานที่มีประโยชน์กันดีกว่า

ดังนั้นเพื่อปรับใช้ MongoDB ใน Docker, พวกเราเขียน:

docker run -it --rm -p 127.0.0.1:27017:27017 
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo

มันจึงเกิดขึ้น การเปิดตัวลูกค้า MongoDB:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

ทีนี้มาเขียนแบบดั้งเดิมกัน สวัสดีชาวโลก:

print (“Hello world!”)

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

หลังจากนั้น - มาเริ่มวงจรกันดีกว่า:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

อย่างที่คุณสังเกตเห็นต่อหน้าเรา เจเอสประจำ, และ MongoDB เป็นล่าม JavaScript ที่มีคุณสมบัติครบถ้วน.

เมื่อใดจึงควรใช้ MongoDB?

มีเรื่องเล่ากันว่าโดยเฉลี่ยแล้วสตาร์ทอัพใน Silicon Valley คือคนที่เปิดหนังสือ “HTML for Dummies” เมื่อสัปดาห์ที่แล้ว เขาจะเลือกกองไหน? ยอมรับว่าสะดวกมากสำหรับเขา ด้วยเหตุผลที่ชัดเจน เขามี JavaScript ในเบราว์เซอร์ของเขา Node.js ทำงานบนเซิร์ฟเวอร์ และ JavaScript ก็ทำงานในฐานข้อมูลด้วย นี่คือจุดที่ 1

ประการที่สอง มี ประสิทธิภาพที่ยอดเยี่ยม Peter Zaitsev หนึ่งในผู้เชี่ยวชาญด้านฐานข้อมูลที่ดีที่สุดในรัสเซีย ในนั้น Peter พูดถึง MySQL และ MongoDB โดยให้ความสนใจเป็นพิเศษว่าเมื่อใดและอะไรควรใช้ดีที่สุด

ประการที่สาม ฉันอยากจะเน้นย้ำว่า MongoDB มีลักษณะที่ดี ความสามารถในการขยายขนาด - และนี่คือหนึ่งในคุณสมบัติสำคัญของฐานข้อมูล หากคุณไม่ทราบล่วงหน้าว่าโหลดจะเป็นอย่างไร MongoDB นั้นสมบูรณ์แบบ นอกจากนี้ยังรองรับรูปแบบที่พร้อมใช้งานทันที เช่น การแบ่งส่วน и การจำลองแบบและทั้งหมดนี้ทำได้ค่อนข้างโปร่งใสนั่นคือสะดวกมากในการทำงาน

เป็นเรื่องที่เกี่ยวกับ คำศัพท์เฉพาะทาง ใน MongoDB แล้ว:

  • ฐานข้อมูลคือฐานข้อมูล (แบบแผน คอลเลกชันของตาราง)
  • ใน MongoDB มีสิ่งเช่น คอลเลกชัน - นี่คืออะนาล็อกของตารางและชุดเอกสารที่ควรเชื่อมต่อตามตรรกะ
  • เอกสารจะคล้ายคลึงกับสตริง

การสร้างฐานข้อมูลและการสืบค้นอย่างง่าย

ในการสร้างฐานข้อมูล คุณเพียงแค่ต้องเริ่มใช้งานมัน:

use learn

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

ตอนนี้เรามาทำการแทรกเอกสารเล็กน้อย ปล่อยให้มันเป็นยูนิคอร์นชื่อออโรร่า:

db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})

db - วัตถุระดับโลกสำหรับการเข้าถึงฐานข้อมูลซึ่งก็คือ "monga" นั่นเอง ใช้สำหรับการแบ่งส่วน shสำหรับการจำลอง - rs.

วัตถุมีคำสั่งอะไรบ้าง? db:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

กลับไปที่คำสั่งของเราซึ่งคอนโซลจะรายงานว่ามีการแทรกหนึ่งบรรทัด:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

คำ unicorns อยู่ในทีม db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) หมายถึงการสะสม โปรดทราบว่าเราไม่ได้อธิบายหรือสร้างคอลเลกชัน แต่เพียงเขียนว่า 'ยูนิคอร์น' แทรก และเรามีคอลเลกชัน

และนี่คือวิธีที่เราทำได้ รับคอลเลกชันทั้งหมดของเรา:

db.getCollectionNames()

และอื่นๆ สามารถ ใส่อันอื่น ของสะสม:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

ทีนี้ลองถามดู คอลเลกชันที่สมบูรณ์ (เราขอเตือนคุณว่าในกรณีของเรา ฐานข้อมูลมีข้อมูลเกี่ยวกับยูนิคอร์นสองตัวที่มีชื่อเดียวกันอยู่แล้ว):

db.unicorns.find()

โปรดทราบว่านี่คือ JSON ของเรา (มีชื่อ เพศ น้ำหนัก ตัวระบุออบเจ็กต์บางตัว):

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

ตอนนี้เรามาแทรกยูนิคอร์นอีกสองสามตัวที่มีชื่อเดียวกัน:

db.unicorns.insert({name: 'Leto', gender: 'm', 
home: 'Arrakeen', worm: false}) 
db.unicorns.insert({name: 'Leto', gender: 'm', 
home: 'Arrakeen', worm: false})

มาดูกันว่าเกิดอะไรขึ้น:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

อย่างที่คุณเห็น เรามีฟิลด์เพิ่มเติม: หน้าแรก и หนอนซึ่งออโรร่าไม่มี

มาเพิ่มยูนิคอร์นอีกสองสามตัว:

db.unicorns.insertMany([{name: 'Horny', dob: new Date(1992,2,13,7,47), loves: ['carrot','papaya'], weight: 600, gender: 'm', vampires: 63}, 
{name: 'Aurora', dob: new Date(1991, 0, 24, 13, 0), loves: ['carrot', 'grape'], weight: 450, gender: 'f', vampires: 43}, 
{name: 'Unicrom', dob: new Date(1973, 1, 9, 22, 10), loves: ['energon', 'redbull'], weight: 984, gender: 'm', vampires: 182}, 
{name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], weight: 575, gender: 'm', vampires: 99}])

ดังนั้นเราจึงแทรกวัตถุอีกสี่รายการโดยใช้ JavaScript:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

ในความเห็นของคุณ ฐานข้อมูลใดสะดวกกว่าในการจัดเก็บข้อมูลหนังสือเดินทาง: ฐานข้อมูลเชิงสัมพันธ์หรือ Mongo

คำตอบนั้นชัดเจน - ใน Monga และตัวอย่างข้างต้นแสดงให้เห็นสิ่งนี้ได้ดี ไม่มีความลับใดที่ KLADR จะสร้างความเจ็บปวดให้กับสหพันธรัฐรัสเซีย และ Monga เข้ากับที่อยู่ได้เป็นอย่างดี เพราะคุณสามารถตั้งค่าทุกอย่างเป็นอาร์เรย์ได้ แล้วชีวิตจะง่ายขึ้นมาก และมันก็เป็นสิ่งที่ดี กรณีผู้ใช้สำหรับ MongoDB.

มาเพิ่มยูนิคอร์นกัน:

db.unicorns.insert({name: 'Solnara', dob: new Date(1985, 6, 4, 2, 1), loves:['apple', 'carrot', 'chocolate'], weight:550, gender:'f', vampires:80}); 
db.unicorns.insert({name:'Ayna', dob: new Date(1998, 2, 7, 8, 30), loves: ['strawberry', 'lemon'], weight: 733, gender: 'f', vampires: 40}); 
db.unicorns.insert({name:'Kenny', dob: new Date(1997, 6, 1, 10, 42), loves: ['grape', 'lemon'], weight: 690, gender: 'm', vampires: 39}); 
db.unicorns.insert({name: 'Raleigh', dob: new Date(2005, 4, 3, 0, 57), loves: ['apple', 'sugar'], weight: 421, gender: 'm', vampires: 2}); 
db.unicorns.insert({name: 'Leia', dob: new Date(2001, 9, 8, 14, 53), loves: ['apple', 'watermelon'], weight: 601, gender: 'f', vampires: 33}); 
db.unicorns.insert({name: 'Pilot', dob: new Date(1997, 2, 1, 5, 3), loves: ['apple', 'watermelon'], weight: 650, gender: 'm', vampires: 54}); 
db.unicorns.insert({name: 'Nimue', dob: new Date(1999, 11, 20, 16, 15), loves: ['grape', 'carrot'], weight: 540, gender: 'f'}); 
db.unicorns.insert({name: 'Dunx', dob: new Date(1976, 6, 18, 18, 18), loves: ['grape', 'watermelon'], weight: 704, gender: 'm', vampires: 165});

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

ตอนนี้ให้ความสนใจกับเอกสาร เช่น กลอง เราจัดเก็บวัตถุทั้งหมด นอกจากนี้ยังมีข้อมูลเกี่ยวกับสิ่งที่ยูนิคอร์นชอบและไม่ใช่ทุกคนที่มีข้อมูลนี้ ดังนั้นการโกหกภายใน อาร์เรย์เต็มรูปแบบ.

อย่างไรก็ตามหากต้องการแสดงผลลัพธ์ให้สวยงามยิ่งขึ้นคุณสามารถเรียกเมธอดที่อยู่ท้ายคำสั่งค้นหาได้ .pretty():

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

ถ้าจำเป็นต้องได้รับ ข้อมูลเกี่ยวกับข้อผิดพลาดล่าสุดให้ใช้คำสั่งต่อไปนี้:

db.getLastError()

ซึ่งสามารถทำได้หลังจากการแทรกแต่ละครั้ง หรือคุณสามารถกำหนดค่า เขียนข้อกังวล ก็ได้ เข้าไปอ่านในนี้เลยดีกว่า เอกสารราชการซึ่งโดยวิธีการนั้นมีข้อมูลมากใน Monga อีกอย่าง มันมีอยู่ใน Habré ด้วย บทความที่ดี เกี่ยวกับเรื่องนี้

มาดูคำถามที่ซับซ้อนมากขึ้นกันดีกว่า

ค้นหาค่าฟิลด์ที่แน่นอน:

db.unicorns.find({gender: 'm'})

โดยการเขียนคำขอดังกล่าว เราจะได้รับรายชื่อยูนิคอร์นตัวผู้ทั้งหมดในเอาต์พุตคอนโซล

คุณก็สามารถทำได้เช่นกัน สอบถามข้อมูลหลายช่องพร้อมกัน: ตามเพศและตามน้ำหนัก:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

ข้างต้นให้ความสนใจเป็นพิเศษ ตัวเลือก $gtซึ่งช่วยให้คุณผสมพันธุ์ยูนิคอร์นตัวผู้ทั้งหมดที่มีน้ำหนักมากกว่า 700 ตัวได้

คุณสามารถตรวจสอบได้ สนามนี้มีอยู่จริงไหม?:

db.unicorns.find({vampires: {$exists: false}})

หรือดังนั้น:

db.unicorns.find({'parents.father': {$exists: true}})

ทีมต่อไปจะนำยูนิคอร์นออกมา ซึ่งมีชื่อขึ้นต้นด้วยตัวอักษร A หรือ a:

db.unicorns.find({name: {$regex: "^[Aa]"}})

ทีนี้ลองมาพิจารณากัน ค้นหาอาร์เรย์. คำถาม #1: คำสั่งนี้จะส่งออกอะไร:

db.unicorns.find({loves:'apple'})

ถูกต้องแล้ว: ทุกคนที่รักแอปเปิ้ล

คำสั่งต่อไปนี้จะส่งคืนเฉพาะข้อมูลยูนิคอร์นที่มี แอปเปิ้ลและแตงโมเท่านั้น:

db.unicorns.find({loves:[ "apple", "watermelon" ]})

และอีกหนึ่งคำสั่ง:

db.unicorns.find({loves:[ "watermelon", "apple" ]})

ในกรณีของเรา มันจะไม่ส่งคืนสิ่งใดเลย เนื่องจากเมื่อเราผ่านอาร์เรย์ องค์ประกอบแรกจะถูกเปรียบเทียบกับองค์ประกอบแรก องค์ประกอบที่สองกับองค์ประกอบที่สอง เป็นต้น นั่นคืออาร์เรย์จะต้องตรงกันด้วย ตามตำแหน่ง ค่าเหล่านี้

และนี่คือสิ่งที่ดูเหมือน ค้นหาผ่านอาร์เรย์โดยใช้ตัวดำเนินการ "OR":

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

ตัวอย่างต่อไปนี้จะแสดงให้เราเห็น ค้นหาโดยใช้ตัวดำเนินการ $all. และลำดับนี้ไม่สำคัญ:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

นอกจากนี้เรายังสามารถ ค้นหาตามขนาดอาเรย์:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

แต่ถ้าเราต้องการค้นหาอาร์เรย์ที่มีขนาดมากกว่าหนึ่งล่ะ? มีโอเปอเรเตอร์สำหรับสิ่งนี้ $ที่ไหนซึ่งคุณสามารถเขียนสิ่งที่ซับซ้อนกว่านี้ได้:

db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })

อย่างไรก็ตาม หากคุณต้องการฝึกฝน นั่นแหละ ไฟล์พร้อมคำสั่ง

คุณสมบัติเคอร์เซอร์

เรามาพูดนอกเรื่องเล็กน้อยแล้วพูดคำสองสามคำเกี่ยวกับคุณสมบัติของ Monga:

  • find() และการดำเนินการอื่น ๆ จะไม่ส่งคืนข้อมูล แต่จะส่งคืนสิ่งที่เรียกว่า "เคอร์เซอร์";
  • การที่เราเห็นข้อมูลที่กำลังพิมพ์นั้นเป็นงานของล่าม

กำลังพิมพ์ db.unicorns.find หากไม่มีวงเล็บ เราได้รับพร้อมท์:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

เราดำเนินการตามคำขอต่อไป

นอกจากนี้ยังมีตัวดำเนินการ $in:

db.unicorns.find({weight: {$in: [650, 704]}})

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

ตอนนี้เรามาพูดถึงการอัปเดต. ตัวอย่างเช่น ลองเปลี่ยนน้ำหนักของยูนิคอร์น Rooooodles:

db.unicorns.update({name: "Roooooodles"}, {weight: 2222})

อันเป็นผลมาจากการกระทำของเราเอกสาร จะได้รับการอัปเดตอย่างสมบูรณ์และมีเพียงช่องที่ระบุเพียงช่องเดียวเท่านั้นที่จะยังคงอยู่ในนั้น:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

นั่นคือสิ่งเดียวที่จะยังคงอยู่สำหรับวัตถุของเราคือน้ำหนัก 2222 และแน่นอน id

คุณสามารถแก้ไขสถานการณ์โดยใช้ ชุด $:

db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

ก็เป็นไปได้เช่นกัน ค่าที่เพิ่มขึ้น:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

และก็ยังมี อัพเซิร์ท - การรวมกันของการอัปเดตและการแทรก:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

นี่คือวิธีการทำ การเลือกสนาม:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

ยังคงต้องเพิ่มคำสองสามคำเกี่ยวกับ ข้าม и จำกัด:

เปิดการสัมมนาผ่านเว็บ "พื้นฐาน MongoDB"

เพื่อนร่วมงานก็แค่นั้นแหละ หากคุณต้องการทราบรายละเอียด ดูวิดีโอทั้งหมด. และอย่าลืมแสดงความคิดเห็นของคุณ!

ที่มา: will.com

เพิ่มความคิดเห็น