MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Liên kết &Tạo MongoDB tham gia bằng SQL:Phần 1

SQL là cách phổ biến nhất để thu hút cơ sở dữ liệu quan hệ liên quan đến truy vấn. Điều này được hiểu rằng người dùng sẽ làm việc với cơ sở dữ liệu quan hệ như MySQL và PostgreSQL sử dụng tính năng truy vấn SQL. Nói chung, SQL dễ hiểu và do đó được sử dụng rộng rãi, đặc biệt là trong cơ sở dữ liệu quan hệ.

Tuy nhiên, SQL khá phức tạp khi cố gắng tham gia vào một loạt các tài liệu trong một cơ sở dữ liệu. Tóm lại, nó không dành cho cơ sở dữ liệu tài liệu vì nó đi kèm với một số điểm hạn chế. Ví dụ:bạn không thể truy vấn các tài liệu mảng được nhúng một cách dễ dàng hay đúng hơn là bạn sẽ cần thiết kế một chương trình con để lặp lại và lọc dữ liệu trả về để đưa ra kết quả cần thiết. Do đó, điều này sẽ làm tăng thời lượng thực thi. Nhưng hiểu rõ về SQL sẽ cung cấp nền tảng tốt hơn trong việc tương tác với MongoDB từ một số điểm thay vì bắt đầu lại từ đầu.

Trong blog này, chúng tôi sẽ sử dụng chương trình Studio 3T để hiển thị các truy vấn nối SQL khác nhau và cách bạn có thể thiết kế lại chúng thành các truy vấn MongoDB để đạt được hiệu suất tốt hơn. Chương trình có thể được tải xuống từ liên kết này.

Kết nối SQL với MongoDB

Có một số trình điều khiển hoặc đúng hơn là giao diện mà qua đó bạn có thể sử dụng SQL để giao tiếp với MongoDB, chẳng hạn như ODBC. ODBC là viết tắt của Open Database Connectivity. Đây chỉ đơn giản là một giao diện cho phép các ứng dụng truy cập dữ liệu trong hệ quản trị cơ sở dữ liệu sử dụng SQL làm quy trình chuẩn để truy cập dữ liệu đó. Nó đi kèm với một lợi thế về khả năng tương tác bổ sung, nhờ đó một ứng dụng duy nhất có thể truy cập vào nhiều hệ thống quản lý cơ sở dữ liệu.

Trong blog này, chúng tôi sẽ sản xuất và kiểm tra mã từ SQL và sau đó tối ưu hóa nó thông qua trình chỉnh sửa tổng hợp để tạo ra một truy vấn MongoDB.

Biểu đồ ánh xạ cho SQL sang MongoDB

Trước khi đi vào chi tiết, chúng ta cần hiểu mối quan hệ cơ bản giữa 2 cơ sở dữ liệu này, đặc biệt là các từ khóa trong khái niệm truy vấn.

Thuật ngữ và khái niệm

SQL MongoDB
Bảng
Hàng
Cột
Bảng tham gia
Bộ sưu tập
tài liệu BSON
Trường
$ tra cứu

Khóa chính trong SQL xác định một cột duy nhất về cơ bản sắp xếp các hàng theo thứ tự thời gian ghi. Mặt khác, khóa chính trong MongoDB là trường duy nhất để giữ tài liệu và đảm bảo rằng các trường được lập chỉ mục không lưu trữ các giá trị trùng lặp.

Vài người trở thành MongoDB DBA - Đưa MongoDB vào Sản xuất Tìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng MongoDBDownload miễn phí

Mối tương quan giữa SQL và MongoDB

Giả sử chúng tôi có dữ liệu sinh viên và chúng tôi muốn ghi lại dữ liệu này trong cả cơ sở dữ liệu SQL và MongoDB. Chúng ta có thể định nghĩa một đối tượng sinh viên đơn giản là:

{
    name: ‘James Washington’,
    age: 15,
    grade: A,
    Score: 10.5
}

Khi tạo bảng SQL, chúng ta cần xác định tên cột và kiểu dữ liệu trong khi trong MongoDB, một tập hợp sẽ tự động được tạo trong lần chèn đầu tiên.

Bảng dưới đây sẽ giúp chúng ta hiểu cách một số câu lệnh SQL có thể được viết trong MongoDB.

Câu lệnh lược đồ SQL Tuyên bố giản đồ MongoDB
CREATE TABLE students (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  name Varchar (30),
  age Number,
  score Float
)

Để chèn một tài liệu vào cơ sở dữ liệu

INSERT INTO students(Name, age, grade,score) VALUES(“James Washington”, 15, “A”, 10.5)

Chúng ta có thể xác định thiết kế lược đồ bằng cách sử dụng một số mô-đun như mongoose và xác định các trường giống như một đối tượng thay vì chèn trực tiếp tài liệu để hiển thị mối tương quan. Id đã nộp chính sẽ được tạo tự động trong quá trình chèn tài liệu.

{
  name: String,
  age Number,
  score: Number
}

Chèn một tài liệu mới để tạo bộ sưu tập

db.students.insertOne({
    name: ‘James Washington’,
    age: 15,
    grade: ‘A’,
    score: 10.5
})

Sử dụng câu lệnh ADD để thêm một cột mới vào bảng hiện có.

ALTER TABLE students ADD units 10

Cấu trúc của tài liệu thu thập không được xác định rõ ràng và do đó hãy cập nhật tài liệu ở cấp tài liệu bằng cách sử dụng updateMany ()

db.students.updateMany({}, {$set: {units: 10}})

Để thả một cột (đơn vị)

ALTER TABLE students DROP COLUMN units

Để thả một trường (đơn vị)

db.students.updateMany({}, {$unset: {units: “”}})

Để bỏ học sinh xuống bàn

DROP TABLE students

Để đưa sinh viên vào bộ sưu tập

db.students.drop()
Câu lệnh SQL Select Câu lệnh tìm MongoDB

Chọn tất cả các hàng

SELECT * FROM students

Chọn tất cả các tài liệu

db.students.find()

Để chỉ trả về các cột cụ thể.

SELECT name, grade FROM students

Để chỉ trả lại các trường cụ thể. Theo mặc định, trường _id được trả về trừ khi được chỉ định khác trong quá trình chiếu.

db.students.find({}, {name: 1, grade: 1, _id: 0})

Đặt _id:0 có nghĩa là chỉ tài liệu được trả về sẽ chỉ có tên và các giá trị của đối tượng cấp.

Để chọn (các) hàng cụ thể với một số giá trị cột phù hợp.

SELECT * FROM students WHERE grade = “A”

Để chọn (các) tài liệu cụ thể với một số giá trị trường phù hợp.

db.students.find({grade: “A”})

Chọn các hàng có cột có giá trị có một số ký tự làm giá trị tiêu chí được cung cấp

SELECT * FROM students WHERE name like  “James%”

Chọn tài liệu có trường có giá trị có một số ký tự làm giá trị tiêu chí được cung cấp

db.students.find({grade: {$regex: /^James/}})

Để trả về các hàng theo thứ tự tăng dần bằng khóa chính.

SELECT * FROM students ORDER BY id ASC

Để trả lại các tài liệu theo hướng tăng dần bằng khóa chính

db.students.find().sort({$natural: 1})

Để nhóm các hàng đã trả về theo một số cột (cấp)

SELECT DISTINCT (grade) FROM students

Để nhóm các tài liệu đã trả lại theo một số trường (cấp)

db.students.aggregate([
{$group: : {_id: “$grade”}}
]

Giới hạn số lượng hàng được trả về và bỏ qua một số

SELECT * FROM students LIMIT 1 SKIP 4

Giới hạn số lượng tài liệu được trả lại và hàng bỏ qua

db.students.find.limit(1).skip(4)

Một tùy chọn cơ bản là biết cách truy vấn của chúng tôi được thực thi do đó sử dụng phương pháp giải thích.

EXPLAIN SELECT *  FROM students WHERE grade “A”
db.students.find({grade: “A”}).explain()
Câu lệnh cập nhật SQL Tuyên bố cập nhật MongoDB

Cập nhật cột điểm cho học sinh có độ tuổi từ 15 trở lên

UPDATE students SET grade  = “B” WHERE age >= 15

Ở đây chúng tôi sử dụng một số toán tử như $ gt, $ lt và $ lte.

db.students.updateMany({age: {$gte: 15}}, {$set: {status: “B”}})

Tăng một số giá trị cột

UPDATE students SET age  = age + 1 WHERE age < 15
db.students.updateMany({
age: {$lt:15}},{$inc: {age: 1}})
Câu lệnh xóa SQL MongoDB xóa các câu lệnh

Để xóa tất cả các hàng

DELETE FROM students

Để xóa tất cả tài liệu.

db.students.remove({})

Để xóa một hàng cụ thể trong đó một số cột có giá trị cụ thể.

DELETE FROM students WHERE age = 15
db.students.remove({age: 15})

Bảng ánh xạ mẫu này sẽ giúp bạn hiểu rõ hơn về những gì chúng ta sẽ tìm hiểu trong chủ đề tiếp theo của chúng ta.

SQL và Studio 3T

Studio 3T là một trong những chương trình có sẵn giúp kết nối SQL và MongoDB. Nó có tính năng Truy vấn SQL để nâng cao khả năng thao tác với SQL. Truy vấn được diễn giải thành Mongo shell để tạo ra một mã truy vấn đơn giản bằng ngôn ngữ MongoDB tương đương. Bên cạnh việc thực hiện các truy vấn đơn giản, ứng dụng Studio 3T hiện có thể thực hiện các phép nối.

Đối với dữ liệu mẫu của chúng tôi ở trên, sau khi kết nối cơ sở dữ liệu của bạn trong Studio 3T, chúng tôi có thể sử dụng cửa sổ SQL để tìm tài liệu phù hợp với tiêu chí của chúng tôi, tức là:

SELECT * FROM students  WHERE name LIKE  'James%';

Nếu bạn có tài liệu với trường tên được đặt thành giá trị James, thì tài liệu đó sẽ được trả về. Tương tự như vậy, nếu bạn nhấp vào tab mã truy vấn, bạn sẽ thấy một cửa sổ có mã MongoDB tương đương. Đối với tuyên bố ở trên, chúng ta sẽ có:

db.getCollection("students").find(
    { 
        "name" : /^James.*$/i
    }
);

Tóm tắt

Đôi khi bạn có thể muốn một cách nhanh chóng để tương tác với MongoDB từ kiến ​​thức bạn có về SQL. Chúng ta đã tìm hiểu một số điểm tương đồng về mã cơ bản giữa SQL và mã tương đương trong MongoDB. Hơn nữa, một số chương trình như Studio 3T đã thiết lập tốt các công cụ để chuyển đổi truy vấn SQL sang ngôn ngữ tương đương MongoDB và tinh chỉnh truy vấn này để có kết quả tốt hơn. Đối với hầu hết chúng ta, đây sẽ là một công cụ tuyệt vời giúp công việc của chúng ta trở nên dễ dàng và đảm bảo rằng bất kỳ đoạn mã nào chúng ta có cuối cùng đều rất tối ưu cho hiệu suất của cơ sở dữ liệu của chúng ta. Trong Phần 2 của blog này, chúng ta sẽ tìm hiểu về SQL INNER JOIN trong MongoDB.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Viết cố vấn đầu tiên của bạn

  2. Thực thi script shell mongodb thông qua trình điều khiển C #

  3. Kích thước tối đa hoạt động hàng loạt MongoDB là gì?

  4. windows:rails:lỗi khi cài đặt bson_ext

  5. Truy vấn Java / MongoDB theo ngày