Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Các bạn ơi, một khóa học khác sắp ra mắt "Cơ sở dữ liệu" sẽ diễn ra vào ngày mai, vì vậy chúng tôi đã tổ chức một bài học mở truyền thống, bạn có thể xem bản ghi âm đây. Lần này chúng ta nói về cơ sở dữ liệu MongoDB phổ biến: chúng tôi đã nghiên cứu một số điểm tinh tế, xem xét các khái niệm cơ bản về hoạt động, khả năng và kiến ​​trúc. Chúng tôi cũng đã đề cập đến một số Trường hợp người dùng.

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Hội thảo trực tuyến đã được tổ chức Vành đai Ivan, người đứng đầu bộ phận phát triển máy chủ tại CityMobil.

Tính năng MongoDB

MongoDB là một DBMS hướng tài liệu nguồn mở không yêu cầu mô tả lược đồ bảng. Nó được phân loại là NoSQL và sử dụng BSON (JSON nhị phân). Có thể mở rộng ngay lập tức, được viết bằng C++ và hỗ trợ cú pháp JavaScript. Không có hỗ trợ SQL.

MongoDB có trình điều khiển cho nhiều ngôn ngữ lập trình phổ biến (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, v.v.). Ngoài ra còn có các trình điều khiển không chính thức và được cộng đồng hỗ trợ cho các ngôn ngữ lập trình khác.

Chà, hãy xem các lệnh cơ bản có thể hữu ích.

Vì vậy, để triển khai MongoDB trong Docker, chúng tôi viết:

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

Vì vậy nó xảy ra ra mắt khách hàng MongoDB:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Bây giờ hãy viết cái truyền thống Xin chào thế giới:

print (“Hello world!”)

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Sau đó - hãy bắt đầu chu kỳ:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Như bạn đã nhận thấy, trước chúng tôi JS thông thường, và MongoDB là trình thông dịch JavaScript chính thức.

Khi nào nên sử dụng MongoDB?

Có câu chuyện kể rằng một công ty khởi nghiệp bình thường ở Thung lũng Silicon là người đã mở cuốn sách “HTML for Dummies” cách đây một tuần. Anh ta sẽ chọn ngăn xếp nào? Đồng ý rằng sẽ rất thuận tiện cho anh ấy khi, vì những lý do rõ ràng, anh ấy có JavaScript trong trình duyệt của mình, Node.js đang chạy trên máy chủ và JavaScript cũng đang chạy trong cơ sở dữ liệu. Đây là điểm số 1.

Thứ hai, có hiệu suất tuyệt vời Peter Zaitsev, một trong những chuyên gia cơ sở dữ liệu giỏi nhất ở Nga. Trong đó, Peter nói về MySQL và MongoDB, đặc biệt chú ý đến thời điểm và thứ gì là tốt nhất để sử dụng.

Thứ ba, tôi muốn nhấn mạnh rằng MongoDB có đặc điểm tốt khả năng mở rộng - và đây là một trong những tính năng chính của cơ sở dữ liệu. Nếu bạn không biết trước tải sẽ như thế nào thì MongoDB là lựa chọn hoàn hảo. Ngoài ra, nó còn hỗ trợ các mẫu có sẵn như mảnh vỡ и nhân rộng, và tất cả điều này được thực hiện khá minh bạch, nghĩa là nó rất thuận tiện để làm việc.

đối với thuật ngữ trong MongoDB thì:

  • cơ sở dữ liệu là cơ sở dữ liệu (sơ đồ, bộ sưu tập bảng);
  • trong MongoDB có một thứ như một bộ sưu tập - đây là dạng tương tự của một bảng và một bộ tài liệu cần được kết nối một cách hợp lý;
  • tài liệu tương tự như một chuỗi.

Tạo cơ sở dữ liệu và truy vấn đơn giản

Để tạo cơ sở dữ liệu, bạn chỉ cần bắt đầu sử dụng nó:

use learn

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Bây giờ chúng ta hãy tạo một đoạn chèn nhỏ của tài liệu. Ví dụ, hãy để nó là một con kỳ lân tên Aurora:

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

db - một đối tượng toàn cầu để truy cập cơ sở dữ liệu, trên thực tế, chính là “monga”. Được sử dụng để phân mảnh sh, để nhân rộng - rs.

Đối tượng có những lệnh gì? db:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Vì vậy, hãy quay lại lệnh của chúng ta, do đó bảng điều khiển sẽ báo cáo rằng một dòng đã được chèn:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Lời unicorns trong một nhóm db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) biểu thị một bộ sưu tập. Xin lưu ý ở đây rằng chúng tôi không mô tả hay tạo ra bộ sưu tập mà chỉ viết 'kỳ lân', chèn và chúng tôi đã có một bộ sưu tập.

Và đây là cách chúng ta có thể có được tất cả các bộ sưu tập của chúng tôi:

db.getCollectionNames()

Và như thế. Có thể chèn một cái khác bộ sưu tập:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Bây giờ hãy hỏi bộ sưu tập hoàn chỉnh (chúng tôi xin nhắc bạn rằng trong trường hợp của chúng tôi, cơ sở dữ liệu đã chứa thông tin về hai con kỳ lân có cùng tên):

db.unicorns.find()

Xin lưu ý, đây là JSON của chúng tôi (có tên, giới tính, cân nặng, một số mã định danh đối tượng duy nhất):

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Bây giờ hãy chèn thêm một vài con kỳ lân có cùng tên:

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

Và hãy xem điều gì đã xảy ra:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Như bạn có thể thấy, chúng tôi có các trường bổ sung: nhà и sâu, điều mà Aurora không có.

Hãy thêm một vài con kỳ lân nữa:

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}])

Vì vậy, chúng tôi đã chèn thêm bốn đối tượng bằng JavaScript:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Theo bạn, cơ sở dữ liệu nào lưu trữ dữ liệu hộ chiếu thuận tiện hơn: cơ sở dữ liệu quan hệ hay Mongo?

Câu trả lời rất rõ ràng - ở Monga, và ví dụ trên cho thấy rõ điều này. Không có gì bí mật khi KLADR là một vấn đề nhức nhối ở Liên bang Nga. Và Monga rất phù hợp với địa chỉ, vì bạn có thể đặt mọi thứ dưới dạng mảng và cuộc sống sẽ dễ dàng hơn nhiều. Và nó là một cái tốt Trường hợp người dùng cho MongoDB.

Hãy thêm nhiều kỳ lân hơn:

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});

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Bây giờ hãy chú ý đến các tài liệu. BẰNG cái trống Chúng tôi lưu trữ toàn bộ đối tượng. Ngoài ra còn có thông tin về những gì kỳ lân yêu thích và không phải ai cũng có thông tin này. Vậy nên bên trong dối trá Toàn mảng.

Nhân tiện, để hiển thị kết quả đẹp hơn, bạn có thể gọi phương thức ở cuối lệnh tìm kiếm .pretty():

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Nếu bạn cần có được thông tin về lỗi mới nhất, sử dụng lệnh sau:

db.getLastError()

Điều này có thể được thực hiện sau mỗi lần chèn hoặc bạn có thể định cấu hình Viết mối quan tâm. Tốt hơn là nên đọc về nó trong tài liệu chính thức, nhân tiện, nó rất giàu thông tin ở Monga. Nhân tiện, nó cũng có trên Habré bài báo hay vào dịp này.

Hãy chuyển sang các truy vấn phức tạp hơn

Truy vấn giá trị trường chính xác:

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

Bằng cách viết yêu cầu như vậy, chúng tôi sẽ nhận được danh sách tất cả các kỳ lân nam trong đầu ra của bảng điều khiển.

Bạn cũng có thể làm truy vấn trên nhiều trường cùng một lúc: theo giới tính và cân nặng:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Ở trên, hãy chú ý đến điều đặc biệt bộ chọn $gt, cho phép bạn nhân giống tất cả kỳ lân đực nặng hơn 700.

Anh có thể kiểm tra trường này có tồn tại không?:

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

Hay như vậy:

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

Đội tiếp theo sẽ mang kỳ lân ra, có tên bắt đầu bằng chữ A hoặc a:

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

Bây giờ xem xét tìm kiếm mảng. Câu hỏi số 1: Lệnh này sẽ đưa ra kết quả gì:

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

Đúng vậy: tất cả những ai yêu thích táo.

Lệnh sau sẽ chỉ trả về những dữ liệu kỳ lân có chứa chỉ có táo và dưa hấu:

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

Và một lệnh nữa:

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

Trong trường hợp của chúng tôi, nó sẽ không trả về bất cứ thứ gì, vì khi chúng tôi truyền một mảng, phần tử đầu tiên được so sánh với phần tử đầu tiên, phần tử thứ hai với phần tử thứ hai, v.v. Nghĩa là, mảng cũng phải khớp theo vị trí những giá trị.

Và nó trông như thế này tìm kiếm trong một mảng bằng toán tử "OR":

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Ví dụ sau đây sẽ cho chúng ta thấy tìm kiếm bằng toán tử $all. Và ở đây trình tự không quan trọng:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Ngoài ra chúng tôi có thể tìm kiếm theo kích thước mảng:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Nhưng nếu chúng ta muốn tìm một mảng có kích thước lớn hơn một thì sao? Có một nhà điều hành cho việc này $ ở đâu, nhờ đó bạn có thể viết những thứ phức tạp hơn:

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

Nhân tiện, nếu bạn muốn luyện tập, bạn đây rồi tập tin với các lệnh.

Tính năng con trỏ

Hãy lạc đề một chút và nói vài lời về các tính năng của Monga:

  • find() và các thao tác khác không trả về dữ liệu - chúng trả về cái gọi là “con trỏ”;
  • việc chúng ta thấy dữ liệu được in ra là công việc của trình thông dịch.

Đánh máy db.unicorns.find không có dấu ngoặc đơn, chúng tôi nhận được lời nhắc:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Chúng tôi tiếp tục thực hiện các yêu cầu

Ngoài ra còn có toán tử $in:

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

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Bây giờ hãy nói về cập nhật. Ví dụ: hãy thay đổi trọng lượng của kỳ lân Rooooodles:

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

Do hành động của chúng tôi, tài liệu sẽ được cập nhật đầy đủvà chỉ có một trường được chỉ định sẽ còn lại trong đó:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Nghĩa là, thứ duy nhất còn lại đối với đối tượng của chúng ta là trọng lượng 2222 và tất nhiên là id.

Bạn có thể khắc phục tình trạng này bằng cách sử dụng $ set:

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

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Cũng có khả năng giá trị gia tăng:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Và có nâng cao - Kết hợp cập nhật và chèn:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Đây là cách nó được thực hiện lựa chọn trường:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Vẫn còn để thêm một vài từ về bỏ qua и hạn chế:

Mở hội thảo trực tuyến "Cơ bản về MongoDB"

Đồng nghiệp, chỉ vậy thôi, nếu bạn muốn biết chi tiết, xem toàn bộ video. Và đừng quên để lại ý kiến ​​​​của bạn!

Nguồn: www.habr.com

Thêm một lời nhận xét