เพื่อนๆ เปิดตัวอีกคอร์สครับ
การสัมมนาผ่านเว็บถูกจัดขึ้น
คุณสมบัติ 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:
ทีนี้มาเขียนแบบดั้งเดิมกัน สวัสดีชาวโลก:
print (“Hello world!”)
หลังจากนั้น - มาเริ่มวงจรกันดีกว่า:
อย่างที่คุณสังเกตเห็นต่อหน้าเรา เจเอสประจำ, และ MongoDB เป็นล่าม JavaScript ที่มีคุณสมบัติครบถ้วน.
เมื่อใดจึงควรใช้ MongoDB?
มีเรื่องเล่ากันว่าโดยเฉลี่ยแล้วสตาร์ทอัพใน Silicon Valley คือคนที่เปิดหนังสือ “HTML for Dummies” เมื่อสัปดาห์ที่แล้ว เขาจะเลือกกองไหน? ยอมรับว่าสะดวกมากสำหรับเขา ด้วยเหตุผลที่ชัดเจน เขามี JavaScript ในเบราว์เซอร์ของเขา Node.js ทำงานบนเซิร์ฟเวอร์ และ JavaScript ก็ทำงานในฐานข้อมูลด้วย นี่คือจุดที่ 1
ประการที่สอง มี
ประการที่สาม ฉันอยากจะเน้นย้ำว่า MongoDB มีลักษณะที่ดี ความสามารถในการขยายขนาด - และนี่คือหนึ่งในคุณสมบัติสำคัญของฐานข้อมูล หากคุณไม่ทราบล่วงหน้าว่าโหลดจะเป็นอย่างไร MongoDB นั้นสมบูรณ์แบบ นอกจากนี้ยังรองรับรูปแบบที่พร้อมใช้งานทันที เช่น การแบ่งส่วน и การจำลองแบบและทั้งหมดนี้ทำได้ค่อนข้างโปร่งใสนั่นคือสะดวกมากในการทำงาน
เป็นเรื่องที่เกี่ยวกับ คำศัพท์เฉพาะทาง ใน MongoDB แล้ว:
- ฐานข้อมูลคือฐานข้อมูล (แบบแผน คอลเลกชันของตาราง)
- ใน MongoDB มีสิ่งเช่น คอลเลกชัน - นี่คืออะนาล็อกของตารางและชุดเอกสารที่ควรเชื่อมต่อตามตรรกะ
- เอกสารจะคล้ายคลึงกับสตริง
การสร้างฐานข้อมูลและการสืบค้นอย่างง่าย
ในการสร้างฐานข้อมูล คุณเพียงแค่ต้องเริ่มใช้งานมัน:
use learn
ตอนนี้เรามาทำการแทรกเอกสารเล็กน้อย ปล่อยให้มันเป็นยูนิคอร์นชื่อออโรร่า:
db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
db - วัตถุระดับโลกสำหรับการเข้าถึงฐานข้อมูลซึ่งก็คือ "monga" นั่นเอง ใช้สำหรับการแบ่งส่วน shสำหรับการจำลอง - rs.
วัตถุมีคำสั่งอะไรบ้าง? db:
กลับไปที่คำสั่งของเราซึ่งคอนโซลจะรายงานว่ามีการแทรกหนึ่งบรรทัด:
คำ unicorns
อยู่ในทีม db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
หมายถึงการสะสม โปรดทราบว่าเราไม่ได้อธิบายหรือสร้างคอลเลกชัน แต่เพียงเขียนว่า 'ยูนิคอร์น' แทรก และเรามีคอลเลกชัน
และนี่คือวิธีที่เราทำได้ รับคอลเลกชันทั้งหมดของเรา:
db.getCollectionNames()
และอื่นๆ สามารถ ใส่อันอื่น ของสะสม:
ทีนี้ลองถามดู คอลเลกชันที่สมบูรณ์ (เราขอเตือนคุณว่าในกรณีของเรา ฐานข้อมูลมีข้อมูลเกี่ยวกับยูนิคอร์นสองตัวที่มีชื่อเดียวกันอยู่แล้ว):
db.unicorns.find()
โปรดทราบว่านี่คือ JSON ของเรา (มีชื่อ เพศ น้ำหนัก ตัวระบุออบเจ็กต์บางตัว):
ตอนนี้เรามาแทรกยูนิคอร์นอีกสองสามตัวที่มีชื่อเดียวกัน:
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
มาดูกันว่าเกิดอะไรขึ้น:
อย่างที่คุณเห็น เรามีฟิลด์เพิ่มเติม: หน้าแรก и หนอนซึ่งออโรร่าไม่มี
มาเพิ่มยูนิคอร์นอีกสองสามตัว:
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:
ในความเห็นของคุณ ฐานข้อมูลใดสะดวกกว่าในการจัดเก็บข้อมูลหนังสือเดินทาง: ฐานข้อมูลเชิงสัมพันธ์หรือ 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});
ตอนนี้ให้ความสนใจกับเอกสาร เช่น กลอง เราจัดเก็บวัตถุทั้งหมด นอกจากนี้ยังมีข้อมูลเกี่ยวกับสิ่งที่ยูนิคอร์นชอบและไม่ใช่ทุกคนที่มีข้อมูลนี้ ดังนั้นการโกหกภายใน อาร์เรย์เต็มรูปแบบ.
อย่างไรก็ตามหากต้องการแสดงผลลัพธ์ให้สวยงามยิ่งขึ้นคุณสามารถเรียกเมธอดที่อยู่ท้ายคำสั่งค้นหาได้ .pretty()
:
ถ้าจำเป็นต้องได้รับ ข้อมูลเกี่ยวกับข้อผิดพลาดล่าสุดให้ใช้คำสั่งต่อไปนี้:
db.getLastError()
ซึ่งสามารถทำได้หลังจากการแทรกแต่ละครั้ง หรือคุณสามารถกำหนดค่า เขียนข้อกังวล ก็ได้ เข้าไปอ่านในนี้เลยดีกว่า
มาดูคำถามที่ซับซ้อนมากขึ้นกันดีกว่า
ค้นหาค่าฟิลด์ที่แน่นอน:
db.unicorns.find({gender: 'm'})
โดยการเขียนคำขอดังกล่าว เราจะได้รับรายชื่อยูนิคอร์นตัวผู้ทั้งหมดในเอาต์พุตคอนโซล
คุณก็สามารถทำได้เช่นกัน สอบถามข้อมูลหลายช่องพร้อมกัน: ตามเพศและตามน้ำหนัก:
ข้างต้นให้ความสนใจเป็นพิเศษ ตัวเลือก $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":
ตัวอย่างต่อไปนี้จะแสดงให้เราเห็น ค้นหาโดยใช้ตัวดำเนินการ $all. และลำดับนี้ไม่สำคัญ:
นอกจากนี้เรายังสามารถ ค้นหาตามขนาดอาเรย์:
แต่ถ้าเราต้องการค้นหาอาร์เรย์ที่มีขนาดมากกว่าหนึ่งล่ะ? มีโอเปอเรเตอร์สำหรับสิ่งนี้ $ที่ไหนซึ่งคุณสามารถเขียนสิ่งที่ซับซ้อนกว่านี้ได้:
db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })
อย่างไรก็ตาม หากคุณต้องการฝึกฝน
คุณสมบัติเคอร์เซอร์
เรามาพูดนอกเรื่องเล็กน้อยแล้วพูดคำสองสามคำเกี่ยวกับคุณสมบัติของ Monga:
- find() และการดำเนินการอื่น ๆ จะไม่ส่งคืนข้อมูล แต่จะส่งคืนสิ่งที่เรียกว่า "เคอร์เซอร์";
- การที่เราเห็นข้อมูลที่กำลังพิมพ์นั้นเป็นงานของล่าม
กำลังพิมพ์ db.unicorns.find หากไม่มีวงเล็บ เราได้รับพร้อมท์:
เราดำเนินการตามคำขอต่อไป
นอกจากนี้ยังมีตัวดำเนินการ $in:
db.unicorns.find({weight: {$in: [650, 704]}})
ตอนนี้เรามาพูดถึงการอัปเดต. ตัวอย่างเช่น ลองเปลี่ยนน้ำหนักของยูนิคอร์น Rooooodles:
db.unicorns.update({name: "Roooooodles"}, {weight: 2222})
อันเป็นผลมาจากการกระทำของเราเอกสาร จะได้รับการอัปเดตอย่างสมบูรณ์และมีเพียงช่องที่ระบุเพียงช่องเดียวเท่านั้นที่จะยังคงอยู่ในนั้น:
นั่นคือสิ่งเดียวที่จะยังคงอยู่สำหรับวัตถุของเราคือน้ำหนัก 2222 และแน่นอน id
คุณสามารถแก้ไขสถานการณ์โดยใช้ ชุด $:
db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})
ก็เป็นไปได้เช่นกัน ค่าที่เพิ่มขึ้น:
และก็ยังมี อัพเซิร์ท - การรวมกันของการอัปเดตและการแทรก:
นี่คือวิธีการทำ การเลือกสนาม:
ยังคงต้องเพิ่มคำสองสามคำเกี่ยวกับ ข้าม и จำกัด:
เพื่อนร่วมงานก็แค่นั้นแหละ หากคุณต้องการทราบรายละเอียด
ที่มา: will.com