Làm cách nào để truy cập tệp mongodb?
MongoDB là một cơ sở dữ liệu đa nền tảng, hướng tài liệu, cung cấp hiệu suất cao, tính sẵn sàng cao và khả năng mở rộng dễ dàng. MongoDB hoạt động trên khái niệm bộ sưu tập và tài liệu Show
cơ sở dữ liệuCơ sở dữ liệu là một thùng chứa vật lý cho các bộ sưu tập. Mỗi cơ sở dữ liệu có tập hợp tệp riêng trên hệ thống tệp. Một máy chủ MongoDB thường có nhiều cơ sở dữ liệu Bộ sưu tậpBộ sưu tập là một nhóm các tài liệu MongoDB. Nó tương đương với một bảng RDBMS. Một bộ sưu tập tồn tại trong một cơ sở dữ liệu duy nhất. Bộ sưu tập không thực thi lược đồ. Tài liệu trong một bộ sưu tập có thể có các trường khác nhau. Thông thường, tất cả các tài liệu trong một bộ sưu tập đều có mục đích tương tự hoặc liên quan Tài liệuTài liệu là một tập hợp các cặp khóa-giá trị. Tài liệu có lược đồ động. Lược đồ động có nghĩa là các tài liệu trong cùng một bộ sưu tập không cần phải có cùng một bộ trường hoặc cấu trúc và các trường chung trong tài liệu của một bộ sưu tập có thể chứa các loại dữ liệu khác nhau Bảng sau đây cho thấy mối quan hệ của thuật ngữ RDBMS với MongoDB RDBMSMongoDBDatabaseDatabaseTableCollectionTuple/RowDocumentcolumnFieldTable JoinEmbedded DocumentsPrimary KeyPrimary Key (Khóa mặc định _id do chính mongodb cung cấp)Database Server and ClientMysqld/Oraclemongodmysql/sqlplusmongoTài liệu mẫuVí dụ sau hiển thị cấu trúc tài liệu của một trang blog, cấu trúc này chỉ đơn giản là một cặp giá trị khóa được phân tách bằng dấu phẩy { _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100, comments: [ { user:'user1', message: 'My first comment', dateCreated: new Date(2011,1,20,2,15), like: 0 }, { user:'user2', message: 'My second comments', dateCreated: new Date(2011,1,25,7,45), like: 5 } ] } _id là một số thập lục phân 12 byte đảm bảo tính duy nhất của mọi tài liệu. Bạn có thể cung cấp _id trong khi chèn tài liệu. Nếu bạn không cung cấp thì MongoDB cung cấp một id duy nhất cho mọi tài liệu. 12 byte này, 4 byte đầu tiên cho dấu thời gian hiện tại, 3 byte tiếp theo cho id máy, 2 byte tiếp theo cho id tiến trình của máy chủ MongoDB và 3 byte còn lại là GIÁ TRỊ gia tăng đơn giản Bất kỳ cơ sở dữ liệu quan hệ nào cũng có thiết kế lược đồ điển hình hiển thị số lượng bảng và mối quan hệ giữa các bảng này. Trong khi ở MongoDB, không có khái niệm về mối quan hệ Ưu điểm của MongoDB so với RDBMS
Tại sao nên sử dụng MongoDB?
Sử dụng MongoDB ở đâu?
Bây giờ chúng ta hãy xem cách cài đặt MongoDB trên Windows Cài đặt MongoDB trên WindowsĐể cài đặt MongoDB trên Windows, trước tiên hãy tải xuống bản phát hành MongoDB mới nhất từ https. //www. mongodb. tổ chức/tải xuống. Đảm bảo bạn có phiên bản MongoDB chính xác tùy thuộc vào phiên bản Windows của bạn. Để có phiên bản Windows của bạn, hãy mở dấu nhắc lệnh và thực hiện lệnh sau C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\> Phiên bản 32-bit của MongoDB chỉ hỗ trợ cơ sở dữ liệu nhỏ hơn 2GB và chỉ phù hợp cho mục đích thử nghiệm và đánh giá Bây giờ hãy giải nén tệp đã tải xuống của bạn vào c. \ ổ đĩa hoặc bất kỳ vị trí nào khác. Đảm bảo tên của thư mục được giải nén là mongodb-win32-i386-[version] hoặc mongodb-win32-x86_64-[version]. Đây [phiên bản] là phiên bản tải xuống MongoDB Tiếp theo, mở dấu nhắc lệnh và chạy lệnh sau C:\>move mongodb-win64-* mongodb 1 dir(s) moved. C:\> Trong trường hợp bạn đã trích xuất MongoDB ở một vị trí khác, thì hãy đi đến đường dẫn đó bằng cách sử dụng lệnh cd FOLDER/DIR và bây giờ hãy chạy quy trình đã cho ở trên MongoDB yêu cầu một thư mục dữ liệu để lưu trữ các tệp của nó. Vị trí mặc định cho thư mục dữ liệu MongoDB là c. \data\db. Vì vậy, bạn cần tạo thư mục này bằng Command Prompt. Thực hiện chuỗi lệnh sau C:\>md data C:\md data\db Nếu bạn phải cài đặt MongoDB ở một vị trí khác, thì bạn cần chỉ định một đường dẫn thay thế cho \data\db bằng cách đặt đường dẫn dbpath trong mongod. người cũ. Đối với cùng, đưa ra các lệnh sau Trong dấu nhắc lệnh, điều hướng đến thư mục bin có trong thư mục cài đặt MongoDB. Giả sử thư mục cài đặt của tôi là D. \thiết lập\mongodb C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" Điều này sẽ hiển thị thông báo chờ kết nối trên đầu ra của bàn điều khiển, điều này cho biết rằng mongod. exe đang chạy thành công Bây giờ để chạy MongoDB, bạn cần mở một dấu nhắc lệnh khác và đưa ra lệnh sau D:\set up\mongodb\bin>mongo.exe MongoDB shell version: 2.4.6 connecting to: test >db.test.save( { a: 1 } ) >db.test.find() { "_id" : ObjectId(5879b0f65a56a454), "a" : 1 } > Điều này sẽ cho thấy MongoDB đã được cài đặt và chạy thành công. Lần tới khi bạn chạy MongoDB, bạn chỉ cần đưa ra các lệnh D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" D:\set up\mongodb\bin>mongo.exe Cài đặt MongoDB trên UbuntuChạy lệnh sau để nhập khóa GPG công khai MongoDB - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 Tạo một /etc/apt/sources. danh sách. d/mongodb. liệt kê tập tin bằng cách sử dụng lệnh sau ________số 8Bây giờ hãy đưa ra lệnh sau để cập nhật kho lưu trữ - sudo apt-get update Tiếp theo cài đặt MongoDB bằng cách sử dụng lệnh sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>0 Trong cài đặt trên, 2. 2. 3 hiện đang được phát hành phiên bản MongoDB. Đảm bảo luôn cài đặt phiên bản mới nhất. Bây giờ MongoDB đã được cài đặt thành công Bắt đầu MongoDBC:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>1 Dừng MongoDBC:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>2 Khởi động lại MongoDBC:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>3 Để sử dụng MongoDB, hãy chạy lệnh sau C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>4 Điều này sẽ kết nối bạn với phiên bản MongoDB đang chạy Trợ giúp MongoDBĐể có danh sách các lệnh, hãy nhập db. trợ giúp () trong ứng dụng khách MongoDB. Điều này sẽ cung cấp cho bạn một danh sách các lệnh như trong ảnh chụp màn hình sau Thống kê MongoDBĐể lấy số liệu thống kê về máy chủ MongoDB, hãy nhập lệnh db. stats() trong ứng dụng khách MongoDB. Điều này sẽ hiển thị tên cơ sở dữ liệu, số lượng bộ sưu tập và tài liệu trong cơ sở dữ liệu. Đầu ra của lệnh được hiển thị trong ảnh chụp màn hình sau Dữ liệu trong MongoDB có lược đồ linh hoạt. tài liệu trong cùng một bộ sưu tập. Chúng không cần phải có cùng một bộ trường hoặc cấu trúc và các trường chung trong tài liệu của bộ sưu tập có thể chứa các loại dữ liệu khác nhau Một số lưu ý khi thiết kế Schema trong MongoDB
Thí dụGiả sử một khách hàng cần thiết kế cơ sở dữ liệu cho blog/trang web của mình và xem sự khác biệt giữa thiết kế lược đồ RDBMS và MongoDB. Website có các yêu cầu sau
Trong lược đồ RDBMS, thiết kế cho các yêu cầu trên sẽ có tối thiểu ba bảng Trong lược đồ MongoDB, thiết kế sẽ có một bài đăng bộ sưu tập và cấu trúc sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>5 Vì vậy, trong khi hiển thị dữ liệu, trong RDBMS, bạn cần nối ba bảng và trong MongoDB, dữ liệu sẽ chỉ được hiển thị từ một bộ sưu tập Trong chương này, chúng ta sẽ xem cách tạo cơ sở dữ liệu trong MongoDB Lệnh sử dụngMongoDB sử dụng DATABASE_NAME được sử dụng để tạo cơ sở dữ liệu. Lệnh sẽ tạo cơ sở dữ liệu mới nếu nó chưa tồn tại, ngược lại nó sẽ trả về cơ sở dữ liệu hiện có cú phápCú pháp cơ bản của câu lệnh use DATABASE như sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>6 Thí dụNếu bạn muốn sử dụng cơ sở dữ liệu có tên , thì hãy sử dụng câu lệnh DATABASE như sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>7 Để kiểm tra cơ sở dữ liệu hiện được chọn của bạn, hãy sử dụng lệnh db C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>8 Nếu bạn muốn kiểm tra danh sách cơ sở dữ liệu của mình, hãy sử dụng lệnh show dbs C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>9 Cơ sở dữ liệu đã tạo của bạn (mydb) không có trong danh sách. Để hiển thị cơ sở dữ liệu, bạn cần chèn ít nhất một tài liệu vào đó C:\>move mongodb-win64-* mongodb 1 dir(s) moved. C:\>0 Trong cơ sở dữ liệu mặc định của MongoDB là test. Nếu bạn không tạo bất kỳ cơ sở dữ liệu nào, thì các bộ sưu tập sẽ được lưu trữ trong cơ sở dữ liệu thử nghiệm Trong chương này, chúng ta sẽ xem cách xóa cơ sở dữ liệu bằng lệnh MongoDB Phương thức dropDatabase()cơ sở dữ liệu MongoDB. dropDatabase() được sử dụng để loại bỏ cơ sở dữ liệu hiện có cú phápCú pháp cơ bản của lệnh dropDatabase() như sau - C:\>move mongodb-win64-* mongodb 1 dir(s) moved. C:\>1 Thao tác này sẽ xóa cơ sở dữ liệu đã chọn. Nếu bạn chưa chọn bất kỳ cơ sở dữ liệu nào, nó sẽ xóa cơ sở dữ liệu 'thử nghiệm' mặc định Thí dụĐầu tiên, kiểm tra danh sách các cơ sở dữ liệu có sẵn bằng cách sử dụng lệnh, show dbs C:\>move mongodb-win64-* mongodb 1 dir(s) moved. C:\>2 Nếu bạn muốn xóa cơ sở dữ liệu mới, lệnh dropDatabase() sẽ như sau: C:\>move mongodb-win64-* mongodb 1 dir(s) moved. C:\>3 Bây giờ hãy kiểm tra danh sách cơ sở dữ liệu C:\>move mongodb-win64-* mongodb 1 dir(s) moved. C:\>4 Trong chương này, chúng ta sẽ xem cách tạo một bộ sưu tập bằng MongoDB Phương thức createCollection()cơ sở dữ liệu MongoDB. createCollection(name, options) được sử dụng để tạo bộ sưu tập cú phápCú pháp cơ bản của lệnh createCollection() như sau - C:\>move mongodb-win64-* mongodb 1 dir(s) moved. C:\>5 Trong lệnh, tên là tên của bộ sưu tập sẽ được tạo. Tùy chọn là một tài liệu và được sử dụng để chỉ định cấu hình của bộ sưu tập Tham sốTypeDescriptionNameStringName của bộ sưu tập sẽ được tạoOptionsDocument(Tùy chọn) Chỉ định các tùy chọn về kích thước bộ nhớ và lập chỉ mụcTham số tùy chọn là tùy chọn, vì vậy bạn chỉ cần chỉ định tên của bộ sưu tập. Sau đây là danh sách các tùy chọn bạn có thể sử dụng – FieldTypeDescriptioncappedBoolean(Tùy chọn) Nếu đúng, bật bộ sưu tập giới hạn. Bộ sưu tập được giới hạn là bộ sưu tập có kích thước cố định tự động ghi đè lên các mục nhập cũ nhất khi đạt đến kích thước tối đa. Nếu bạn chỉ định đúng, bạn cũng cần chỉ định tham số kích thước. autoIndexIdBoolean(Tùy chọn) Nếu đúng, tự động tạo chỉ mục trên trường _id. s Giá trị mặc định là sai. sizenumber(Tùy chọn) Chỉ định kích thước tối đa tính bằng byte cho bộ sưu tập giới hạn. Nếu giới hạn là đúng, thì bạn cũng cần chỉ định trường này. maxnumber(Tùy chọn) Chỉ định số lượng tài liệu tối đa được phép trong bộ sưu tập giới hạnTrong khi chèn tài liệu, MongoDB trước tiên kiểm tra trường kích thước của bộ sưu tập giới hạn, sau đó kiểm tra trường tối đa ví dụCú pháp cơ bản của phương thức createCollection() không có tùy chọn như sau: C:\>move mongodb-win64-* mongodb 1 dir(s) moved. C:\>6 Bạn có thể kiểm tra bộ sưu tập đã tạo bằng cách sử dụng lệnh show collections C:\>move mongodb-win64-* mongodb 1 dir(s) moved. C:\>7 Ví dụ sau đây cho thấy cú pháp của phương thức createCollection() với một số tùy chọn quan trọng – C:\>move mongodb-win64-* mongodb 1 dir(s) moved. C:\>8 Trong MongoDB, bạn không cần tạo bộ sưu tập. MongoDB tự động tạo bộ sưu tập khi bạn chèn một số tài liệu C:\>move mongodb-win64-* mongodb 1 dir(s) moved. C:\>9 Trong chương này, chúng ta sẽ xem cách loại bỏ một bộ sưu tập bằng MongoDB Phương thức drop()Cơ sở dữ liệu của MongoDB. thu thập. drop() được sử dụng để loại bỏ một bộ sưu tập khỏi cơ sở dữ liệu cú phápCú pháp cơ bản của lệnh drop() như sau - C:\>md data C:\md data\db0 Thí dụTrước tiên, hãy kiểm tra các bộ sưu tập có sẵn trong cơ sở dữ liệu của bạn mydb C:\>md data C:\md data\db1 Bây giờ thả bộ sưu tập với tên mycollection C:\>md data C:\md data\db2 Kiểm tra lại danh sách các bộ sưu tập vào cơ sở dữ liệu C:\>md data C:\md data\db3 Phương thức drop() sẽ trả về true, nếu bộ sưu tập đã chọn được hủy thành công, nếu không, nó sẽ trả về false MongoDB hỗ trợ nhiều kiểu dữ liệu. Một số trong số họ là -
Trong chương này, chúng ta sẽ tìm hiểu cách chèn tài liệu vào bộ sưu tập MongoDB Phương thức chèn()Để chèn dữ liệu vào bộ sưu tập MongoDB, bạn cần sử dụng phương thức insert() hoặc save() của MongoDB cú phápCú pháp cơ bản của lệnh insert() như sau - C:\>md data C:\md data\db4 Thí dụC:\>md data C:\md data\db5 Ở đây mycol là tên bộ sưu tập của chúng tôi, như được tạo trong chương trước. Nếu bộ sưu tập không tồn tại trong cơ sở dữ liệu, thì MongoDB sẽ tạo bộ sưu tập này và sau đó chèn một tài liệu vào đó Trong tài liệu được chèn vào, nếu chúng ta không chỉ định tham số _id thì MongoDB sẽ gán một ObjectId duy nhất cho tài liệu này _id là số thập lục phân 12 byte duy nhất cho mọi tài liệu trong bộ sưu tập. 12 byte được chia như sau - C:\>md data C:\md data\db6 Để chèn nhiều tài liệu trong một truy vấn, bạn có thể truyền một mảng tài liệu vào lệnh insert() Thí dụC:\>md data C:\md data\db7 Để chèn tài liệu, bạn có thể sử dụng db. bưu kiện. lưu (tài liệu) cũng. Nếu bạn không chỉ định _id trong tài liệu thì phương thức save() sẽ hoạt động giống như phương thức insert(). Nếu bạn chỉ định _id thì nó sẽ thay thế toàn bộ dữ liệu của tài liệu chứa _id như được chỉ định trong phương thức save() Trong chương này, chúng ta sẽ tìm hiểu cách truy vấn tài liệu từ bộ sưu tập MongoDB Phương thức find()Để truy vấn dữ liệu từ bộ sưu tập MongoDB, bạn cần sử dụng phương thức find() của MongoDB cú phápCú pháp cơ bản của phương thức find() như sau - C:\>md data C:\md data\db8 phương thức find() sẽ hiển thị tất cả các tài liệu theo cách không có cấu trúc Phương thức xinh()Để hiển thị kết quả theo cách đã định dạng, bạn có thể sử dụng phương thức pretty() cú phápC:\>md data C:\md data\db9 Thí dụC:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"0 Ngoài phương thức find(), còn có phương thức findOne() chỉ trả về một tài liệu RDBMS Where Mệnh đề tương đương trong MongoDBĐể truy vấn tài liệu trên cơ sở một số điều kiện, bạn có thể sử dụng các thao tác sau OperationSyntaxExampleRDBMS EquivalentEquality{:}db.mycol.find({"by":"tutorials point"}).pretty()where by = 'tutorials point'Less Than{:{$lt:}}db.mycol.find({"likes":{$lt:50}}).pretty()where likes < 50Less Than Equals{:{$lte:}}db.mycol.find({"likes":{$lte:50}}).pretty()where likes <= 50Greater Than{:{$gt:}}db.mycol.find({"likes":{$gt:50}}).pretty()where likes > 50Greater Than Equals{:{$gte:}}db.mycol.find({"likes":{$gte:50}}).pretty()where likes >= 50Not Equals{:{$ne:}}db.mycol.find({"likes":{$ne:50}}).pretty()where likes != 50VÀ trong MongoDBcú phápTrong phương thức find(), nếu bạn chuyển nhiều khóa bằng cách tách chúng bằng ',' thì MongoDB sẽ coi đó là điều kiện AND. Sau đây là cú pháp cơ bản của AND − C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"1 Thí dụVí dụ sau sẽ hiển thị tất cả các hướng dẫn được viết bởi 'điểm hướng dẫn' và có tiêu đề là 'Tổng quan về MongoDB' C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"2 Đối với ví dụ đã cho ở trên, mệnh đề where tương đương sẽ là ' where by = 'điểm hướng dẫn' VÀ title = 'Tổng quan về MongoDB''. Bạn có thể chuyển bất kỳ số lượng cặp khóa, giá trị nào trong mệnh đề find HOẶC trong MongoDBcú phápĐể truy vấn tài liệu dựa trên điều kiện OR, bạn cần sử dụng từ khóa $or. Sau đây là cú pháp cơ bản của OR − C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"3 Thí dụVí dụ sau sẽ hiển thị tất cả các hướng dẫn được viết bởi 'điểm hướng dẫn' hoặc có tiêu đề là 'Tổng quan về MongoDB' C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"4 Sử dụng AND và OR cùng nhauThí dụVí dụ sau sẽ hiển thị các tài liệu có lượt thích lớn hơn 10 và có tiêu đề là 'Tổng quan về MongoDB' hoặc theo 'điểm hướng dẫn'. SQL tương đương mệnh đề where là 'where likes>10 AND (by = 'tutorials point' OR title = 'MongoDB Overview')' C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"5 Các phương thức update() và save() của MongoDB được sử dụng để cập nhật tài liệu vào một bộ sưu tập. Phương thức update() cập nhật các giá trị trong tài liệu hiện có trong khi phương thức save() thay thế tài liệu hiện có bằng tài liệu được truyền trong phương thức save() Phương thức cập nhật MongoDB()Phương thức update() cập nhật các giá trị trong tài liệu hiện có cú phápCú pháp cơ bản của phương thức update() như sau - C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"6 Thí dụHãy xem xét bộ sưu tập mycol có dữ liệu sau C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"7 Ví dụ sau sẽ đặt tiêu đề mới 'Hướng dẫn MongoDB mới' cho các tài liệu có tiêu đề là 'Tổng quan về MongoDB' C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"8 Theo mặc định, MongoDB sẽ chỉ cập nhật một tài liệu duy nhất. Để cập nhật nhiều tài liệu, bạn cần đặt tham số 'multi' thành true C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"9 Phương thức Lưu () MongoDBPhương thức save() thay thế tài liệu hiện có bằng tài liệu mới được truyền vào phương thức save() cú phápCú pháp cơ bản của phương thức save() trong MongoDB được hiển thị bên dưới - D:\set up\mongodb\bin>mongo.exe MongoDB shell version: 2.4.6 connecting to: test >db.test.save( { a: 1 } ) >db.test.find() { "_id" : ObjectId(5879b0f65a56a454), "a" : 1 } >0 Thí dụVí dụ sau sẽ thay thế tài liệu bằng _id '5983548781331adf45ec5' D:\set up\mongodb\bin>mongo.exe MongoDB shell version: 2.4.6 connecting to: test >db.test.save( { a: 1 } ) >db.test.find() { "_id" : ObjectId(5879b0f65a56a454), "a" : 1 } >1 Trong chương này, chúng ta sẽ tìm hiểu cách xóa một tài liệu bằng MongoDB Phương thức loại bỏ ()Phương thức remove() của MongoDB được sử dụng để xóa tài liệu khỏi bộ sưu tập. phương thức remove() chấp nhận hai tham số. Một là tiêu chí xóa và thứ hai là cờ justOne
cú phápCú pháp cơ bản của phương thức remove() như sau - D:\set up\mongodb\bin>mongo.exe MongoDB shell version: 2.4.6 connecting to: test >db.test.save( { a: 1 } ) >db.test.find() { "_id" : ObjectId(5879b0f65a56a454), "a" : 1 } >2 Thí dụHãy xem xét bộ sưu tập mycol có dữ liệu sau C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"7 Ví dụ sau sẽ xóa tất cả các tài liệu có tiêu đề là 'Tổng quan về MongoDB' D:\set up\mongodb\bin>mongo.exe MongoDB shell version: 2.4.6 connecting to: test >db.test.save( { a: 1 } ) >db.test.find() { "_id" : ObjectId(5879b0f65a56a454), "a" : 1 } >4 Chỉ xóa mộtNếu có nhiều bản ghi và bạn chỉ muốn xóa bản ghi đầu tiên, thì hãy đặt tham số justOne trong phương thức remove() D:\set up\mongodb\bin>mongo.exe MongoDB shell version: 2.4.6 connecting to: test >db.test.save( { a: 1 } ) >db.test.find() { "_id" : ObjectId(5879b0f65a56a454), "a" : 1 } >5 Xóa tất cả tài liệuNếu bạn không chỉ định tiêu chí xóa thì MongoDB sẽ xóa toàn bộ tài liệu khỏi bộ sưu tập. Điều này tương đương với lệnh truncate của SQL D:\set up\mongodb\bin>mongo.exe MongoDB shell version: 2.4.6 connecting to: test >db.test.save( { a: 1 } ) >db.test.find() { "_id" : ObjectId(5879b0f65a56a454), "a" : 1 } >6 Trong MongoDB, phép chiếu có nghĩa là chỉ chọn dữ liệu cần thiết thay vì chọn toàn bộ dữ liệu của tài liệu. Nếu tài liệu có 5 trường và bạn chỉ cần hiển thị 3 trường thì chỉ chọn 3 trường trong số đó Phương thức find()Phương thức find() của MongoDB, được giải thích trong MongoDB Query Document chấp nhận tham số tùy chọn thứ hai là danh sách các trường mà bạn muốn truy xuất. Trong MongoDB, khi bạn thực thi phương thức find() thì nó sẽ hiển thị tất cả các trường của tài liệu. Để hạn chế điều này, bạn cần thiết lập danh sách các trường có giá trị 1 hoặc 0. 1 được sử dụng để hiển thị trường trong khi 0 được sử dụng để ẩn các trường cú phápCú pháp cơ bản của phương thức find() với phép chiếu như sau - D:\set up\mongodb\bin>mongo.exe MongoDB shell version: 2.4.6 connecting to: test >db.test.save( { a: 1 } ) >db.test.find() { "_id" : ObjectId(5879b0f65a56a454), "a" : 1 } >7 Thí dụHãy xem xét bộ sưu tập mycol có dữ liệu sau - C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"7 Ví dụ sau sẽ hiển thị tiêu đề của tài liệu trong khi truy vấn tài liệu D:\set up\mongodb\bin>mongo.exe MongoDB shell version: 2.4.6 connecting to: test >db.test.save( { a: 1 } ) >db.test.find() { "_id" : ObjectId(5879b0f65a56a454), "a" : 1 } >9 Xin lưu ý trường _id luôn được hiển thị trong khi thực thi phương thức find(), nếu bạn không muốn trường này, thì bạn cần đặt nó thành 0 Trong chương này, chúng ta sẽ tìm hiểu cách giới hạn các bản ghi bằng MongoDB Phương thức Giới hạn ()Để giới hạn các bản ghi trong MongoDB, bạn cần sử dụng phương thức limit(). Phương thức chấp nhận một đối số kiểu số, là số lượng tài liệu mà bạn muốn hiển thị cú phápCú pháp cơ bản của phương thức limit() như sau - D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" D:\set up\mongodb\bin>mongo.exe0 Thí dụHãy xem xét bộ sưu tập myycol có dữ liệu sau C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"7 Ví dụ sau sẽ chỉ hiển thị hai tài liệu trong khi truy vấn tài liệu D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" D:\set up\mongodb\bin>mongo.exe2 Nếu bạn không chỉ định đối số số trong phương thức limit() thì nó sẽ hiển thị tất cả các tài liệu từ bộ sưu tập Phương thức bỏ qua MongoDB()Ngoài phương thức limit(), còn có một phương thức khác là skip() cũng chấp nhận đối số kiểu số và được sử dụng để bỏ qua số lượng tài liệu cú phápCú pháp cơ bản của phương thức skip() như sau - D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" D:\set up\mongodb\bin>mongo.exe3 Thí dụVí dụ sau sẽ chỉ hiển thị tài liệu thứ hai D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" D:\set up\mongodb\bin>mongo.exe4 Xin lưu ý, giá trị mặc định trong phương thức bỏ qua () là 0 Trong chương này, chúng ta sẽ tìm hiểu cách sắp xếp các bản ghi trong MongoDB Phương thức sắp xếp()Để sắp xếp tài liệu trong MongoDB, bạn cần sử dụng phương thức sort(). Phương thức chấp nhận một tài liệu chứa danh sách các trường cùng với thứ tự sắp xếp của chúng. Để chỉ định thứ tự sắp xếp 1 và -1 được sử dụng. 1 được sử dụng cho thứ tự tăng dần trong khi -1 được sử dụng cho thứ tự giảm dần cú phápCú pháp cơ bản của phương thức sort() như sau - D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" D:\set up\mongodb\bin>mongo.exe5 Thí dụHãy xem xét bộ sưu tập myycol có dữ liệu sau C:\Users\XYZ>d: D:\>cd "set up" D:\set up>cd mongodb D:\set up\mongodb>cd bin D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data"7 Ví dụ sau sẽ hiển thị các tài liệu được sắp xếp theo tiêu đề theo thứ tự giảm dần D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" D:\set up\mongodb\bin>mongo.exe7 Xin lưu ý, nếu bạn không chỉ định tùy chọn sắp xếp, thì phương thức sort() sẽ hiển thị các tài liệu theo thứ tự tăng dần Các chỉ mục hỗ trợ giải quyết hiệu quả các truy vấn. Không có chỉ mục, MongoDB phải quét mọi tài liệu của bộ sưu tập để chọn những tài liệu khớp với câu lệnh truy vấn. Quá trình quét này rất kém hiệu quả và yêu cầu MongoDB xử lý một khối lượng lớn dữ liệu Chỉ mục là cấu trúc dữ liệu đặc biệt, lưu trữ một phần nhỏ của tập dữ liệu ở dạng dễ duyệt. Chỉ mục lưu trữ giá trị của một trường cụ thể hoặc tập hợp các trường, được sắp xếp theo giá trị của trường như được chỉ định trong chỉ mục Phương thức createIndex()Để tạo chỉ mục, bạn cần sử dụng phương thức createIndex() của MongoDB cú phápCú pháp cơ bản của phương thức createIndex() như sau() D:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" D:\set up\mongodb\bin>mongo.exe8 Ở đây khóa là tên của trường mà bạn muốn tạo chỉ mục và 1 là thứ tự tăng dần. Để tạo chỉ mục theo thứ tự giảm dần, bạn cần sử dụng -1 Thí dụD:\set up\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" D:\set up\mongodb\bin>mongo.exe9 Trong phương thức createIndex() bạn có thể truyền nhiều trường để tạo chỉ mục trên nhiều trường sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB100 Phương pháp này cũng chấp nhận danh sách các tùy chọn (không bắt buộc). Sau đây là danh sách - Tham sốTypeDescriptionbackgroundBooleanXây dựng chỉ mục trong nền để việc xây dựng chỉ mục không chặn các hoạt động cơ sở dữ liệu khác. Chỉ định true để xây dựng trong nền. Giá trị mặc định là sai. uniqueBooleanTạo một chỉ mục duy nhất để bộ sưu tập không chấp nhận chèn tài liệu trong đó khóa chỉ mục hoặc các khóa khớp với giá trị hiện có trong chỉ mục. Chỉ định true để tạo một chỉ mục duy nhất. Giá trị mặc định là sai. namestringTên của chỉ mục. Nếu không được chỉ định, MongoDB tạo tên chỉ mục bằng cách nối tên của các trường được lập chỉ mục và thứ tự sắp xếp. thưaBooleanNếu đúng, chỉ mục chỉ tham chiếu các tài liệu có trường được chỉ định. Các chỉ mục này sử dụng ít không gian hơn nhưng hoạt động khác nhau trong một số trường hợp (đặc biệt là sắp xếp). Giá trị mặc định là sai. expireafterSecondsintegerChỉ định một giá trị, tính bằng giây, dưới dạng TTL để kiểm soát thời gian MongoDB lưu giữ các tài liệu trong bộ sưu tập này. weightsdocumentTrọng số là một số nằm trong khoảng từ 1 đến 99.999 và biểu thị tầm quan trọng của trường so với các trường được lập chỉ mục khác về mặt điểm số. default_languagestringĐối với chỉ mục văn bản, ngôn ngữ xác định danh sách các từ dừng và quy tắc cho trình tạo gốc và trình mã thông báo. Giá trị mặc định là tiếng Anh. language_overridestringĐối với chỉ mục văn bản, hãy chỉ định tên của trường trong tài liệu chứa ngôn ngữ để ghi đè ngôn ngữ mặc định. Giá trị mặc định là ngôn ngữPhương thức drop Index()Bạn có thể xóa một chỉ mục cụ thể bằng phương thức dropIndex() của MongoDB cú phápCú pháp cơ bản của phương thức DropIndex() như sau() sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB101 Ở đây, "key" là tên của tệp mà bạn muốn xóa chỉ mục hiện có. Thay vì tài liệu đặc tả chỉ mục (cú pháp trên), bạn cũng có thể chỉ định trực tiếp tên của chỉ mục như sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB102 Thí dụsudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB103 Phương thức dropIndexes()Phương pháp này xóa nhiều chỉ mục (được chỉ định) trên một bộ sưu tập cú phápCú pháp cơ bản của phương thức DropIndexes() như sau() - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB104 Thí dụGiả sử chúng ta đã tạo 2 chỉ mục trong bộ sưu tập mycol được đặt tên như hình bên dưới - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB105 Ví dụ sau loại bỏ các chỉ mục đã tạo ở trên của mycol − sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB106 Phương thức getIndexes()Phương thức này trả về mô tả của tất cả các chỉ mục trong bộ sưu tập cú phápSau đây là cú pháp cơ bản của phương thức getIndexes() - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB107 Thí dụGiả sử chúng ta đã tạo 2 chỉ mục trong bộ sưu tập mycol được đặt tên như hình bên dưới - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB105 Ví dụ sau truy xuất tất cả các chỉ mục trong bộ sưu tập mycol − sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB109 Hoạt động tổng hợp xử lý bản ghi dữ liệu và trả về kết quả được tính toán. Hoạt động tổng hợp nhóm các giá trị từ nhiều tài liệu lại với nhau và có thể thực hiện nhiều thao tác khác nhau trên dữ liệu được nhóm để trả về một kết quả duy nhất. Trong SQL đếm (*) và với nhóm theo tương đương với tập hợp mongodb Phương thức tổng hợp ()Để tổng hợp trong MongoDB, bạn nên sử dụng phương thức tổng hợp () cú phápCú pháp cơ bản của phương thức tổng hợp () như sau - echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list0 Thí dụTrong bộ sưu tập, bạn có dữ liệu sau - echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list1 Bây giờ từ bộ sưu tập trên, nếu bạn muốn hiển thị một danh sách cho biết có bao nhiêu hướng dẫn được viết bởi mỗi người dùng, thì bạn sẽ sử dụng phương thức tổng hợp () sau đây - echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list2 Truy vấn tương đương Sql cho trường hợp sử dụng trên sẽ được chọn by_user, đếm(*) từ nhóm mycol bởi by_user Trong ví dụ trên, chúng tôi đã nhóm các tài liệu theo trường by_user và trên mỗi lần xuất hiện của by_user, giá trị tổng trước đó được tăng lên. Sau đây là danh sách các biểu thức tổng hợp có sẵn ExpressionDescriptionExample$sumTổng hợp giá trị đã xác định từ tất cả các tài liệu trong bộ sưu tập. db. nấm mốc. tổng hợp([{$nhóm. {_Tôi. "$by_user", num_tutorial. {$sum. "$like"}}}])$avgTính giá trị trung bình của tất cả các giá trị đã cho từ tất cả các tài liệu trong bộ sưu tập. db. nấm mốc. tổng hợp([{$nhóm. {_Tôi. "$by_user", num_tutorial. {$trung bình. "$like"}}}])$minNhận giá trị tối thiểu tương ứng từ tất cả các tài liệu trong bộ sưu tập. db. nấm mốc. tổng hợp([{$nhóm. {_Tôi. "$by_user", num_tutorial. {$ phút. "$like"}}}])$maxLấy giá trị tối đa tương ứng từ tất cả các tài liệu trong bộ sưu tập. db. nấm mốc. tổng hợp([{$nhóm. {_Tôi. "$by_user", num_tutorial. {$tối đa. "$like"}}}])$pushChèn giá trị vào một mảng trong tài liệu kết quả. db. nấm mốc. tổng hợp([{$nhóm. {_Tôi. "$by_user", url. {$push. "$url"}}}])$addToSet Chèn giá trị vào một mảng trong tài liệu kết quả nhưng không tạo ra các giá trị trùng lặp. db. nấm mốc. tổng hợp([{$nhóm. {_Tôi. "$by_user", url. {$addToSet. "$url"}}}])$firstLấy tài liệu đầu tiên từ tài liệu nguồn theo nhóm. Thông thường, điều này chỉ có ý nghĩa cùng với một số giai đoạn “$sort” được áp dụng trước đó. db. nấm mốc. tổng hợp([{$nhóm. {_Tôi. "$by_user", first_url. {$đầu tiên. "$url"}}}])$lastLấy tài liệu cuối cùng từ tài liệu nguồn theo nhóm. Thông thường, điều này chỉ có ý nghĩa cùng với một số giai đoạn “$sort” được áp dụng trước đó. db. nấm mốc. tổng hợp([{$nhóm. {_Tôi. "$by_user", last_url. {$last. "$url"}}}])Khái niệm đường ốngTrong lệnh UNIX, đường dẫn shell có nghĩa là khả năng thực hiện một thao tác trên một số đầu vào và sử dụng đầu ra làm đầu vào cho lệnh tiếp theo, v.v. MongoDB cũng hỗ trợ khái niệm tương tự trong khung tổng hợp. Có một tập hợp các giai đoạn có thể và mỗi giai đoạn đó được coi là một tập hợp tài liệu làm đầu vào và tạo ra một tập hợp tài liệu kết quả (hoặc tài liệu JSON kết quả cuối cùng ở cuối đường ống). Điều này sau đó có thể được sử dụng cho giai đoạn tiếp theo, v.v. Sau đây là các giai đoạn có thể có trong khung tổng hợp -
Sao chép là quá trình đồng bộ hóa dữ liệu trên nhiều máy chủ. Bản sao cung cấp khả năng dự phòng và tăng tính khả dụng của dữ liệu với nhiều bản sao dữ liệu trên các máy chủ cơ sở dữ liệu khác nhau. Bản sao bảo vệ cơ sở dữ liệu khỏi sự mất mát của một máy chủ. Bản sao cũng cho phép bạn khôi phục sau lỗi phần cứng và gián đoạn dịch vụ. Với các bản sao bổ sung của dữ liệu, bạn có thể dành riêng một bản để khôi phục, báo cáo hoặc sao lưu sau thảm họa Tại sao sao chép?
Cách sao chép hoạt động trong MongoDBMongoDB đạt được bản sao bằng cách sử dụng bộ bản sao. Bộ bản sao là một nhóm các phiên bản mongod lưu trữ cùng một bộ dữ liệu. Trong một bản sao, một nút là nút chính nhận tất cả các thao tác ghi. Tất cả các phiên bản khác, chẳng hạn như phiên bản thứ cấp, áp dụng các thao tác từ phiên bản chính để chúng có cùng một tập dữ liệu. Bộ bản sao chỉ có thể có một nút chính
Một sơ đồ điển hình về sao chép MongoDB được hiển thị trong đó ứng dụng khách luôn tương tác với nút chính và nút chính sau đó sao chép dữ liệu sang các nút phụ Các tính năng của bộ bản sao
Thiết lập một bộ bản saoTrong hướng dẫn này, chúng tôi sẽ chuyển đổi phiên bản MongoDB độc lập thành một bộ bản sao. Để chuyển đổi sang bộ bản sao, sau đây là các bước -
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list3 Thí dụecho 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list4
Thêm thành viên vào bộ bản saoĐể thêm thành viên vào bộ bản sao, hãy bắt đầu phiên bản mongod trên nhiều máy. Bây giờ hãy bắt đầu một ứng dụng khách mongo và đưa ra lệnh rs. cộng() cú phápCú pháp cơ bản của rs. lệnh add() như sau - echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list5 Thí dụGiả sử tên ví dụ mongod của bạn là mongod1. net và nó đang chạy trên cổng 27017. Để thêm phiên bản này vào bộ bản sao, hãy ra lệnh rs. add() trong máy khách Mongo echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list6 Bạn chỉ có thể thêm phiên bản mongod vào bộ bản sao khi bạn được kết nối với nút chính. Để kiểm tra xem bạn có được kết nối với chính hay không, hãy ra lệnh db. isMaster() trong máy khách mongo Sharding là quá trình lưu trữ các bản ghi dữ liệu trên nhiều máy và đó là cách tiếp cận của MongoDB để đáp ứng nhu cầu tăng trưởng dữ liệu. Khi kích thước của dữ liệu tăng lên, một máy đơn lẻ có thể không đủ để lưu trữ dữ liệu cũng như không cung cấp thông lượng đọc và ghi có thể chấp nhận được. Sharding giải quyết vấn đề với tỷ lệ ngang. Với sharding, bạn thêm nhiều máy hơn để hỗ trợ tăng trưởng dữ liệu và nhu cầu của hoạt động đọc và ghi Tại sao Sharding?
Phân mảnh trong MongoDBSơ đồ sau đây cho thấy sharding trong MongoDB sử dụng cụm sharding Trong sơ đồ sau, có ba thành phần chính -
Trong chương này, chúng ta sẽ xem cách tạo bản sao lưu trong MongoDB Kết xuất dữ liệu MongoDBĐể tạo bản sao lưu cơ sở dữ liệu trong MongoDB, bạn nên sử dụng lệnh mongodump. Lệnh này sẽ kết xuất toàn bộ dữ liệu của máy chủ của bạn vào thư mục kết xuất. Có nhiều tùy chọn có sẵn để bạn có thể giới hạn lượng dữ liệu hoặc tạo bản sao lưu cho máy chủ từ xa của mình cú phápCú pháp cơ bản của lệnh mongodump như sau - echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list7 Thí dụKhởi động máy chủ mongodb của bạn. Giả sử rằng máy chủ mongod của bạn đang chạy trên máy chủ cục bộ và cổng 27017, hãy mở dấu nhắc lệnh và chuyển đến thư mục bin của phiên bản mongodb của bạn và nhập lệnh mongodump Hãy xem xét bộ sưu tập mycol có dữ liệu sau echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list7 Lệnh sẽ kết nối với máy chủ đang chạy ở 127. 0. 0. 1 và cổng 27017 và sao lưu tất cả dữ liệu của máy chủ vào thư mục /bin/dump/. Sau đây là đầu ra của lệnh - Sau đây là danh sách các tùy chọn khả dụng có thể được sử dụng với lệnh mongodump Cú phápMô tảExamplemongodump --host HOST_NAME --port PORT_NUMBER Lệnh này sẽ sao lưu tất cả cơ sở dữ liệu của phiên bản mongod đã chỉ định. mongodump --host hướng dẫn điểm. com --port 27017mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY Lệnh này sẽ chỉ sao lưu cơ sở dữ liệu được chỉ định tại đường dẫn đã chỉ định. mongodump --dbpath /data/db/ --out /data/backup/mongodump --collection COLLECTION --db DB_NAME Lệnh này sẽ chỉ sao lưu bộ sưu tập được chỉ định của cơ sở dữ liệu đã chỉ định. mongodump --collection mycol --db testKhôi phục dữ liệuĐể khôi phục dữ liệu sao lưu, lệnh mongorestore của MongoDB được sử dụng. Lệnh này khôi phục tất cả dữ liệu từ thư mục sao lưu cú phápCú pháp cơ bản của lệnh mongorestore là - echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list9 Sau đây là đầu ra của lệnh - Khi bạn đang chuẩn bị triển khai MongoDB, bạn nên cố gắng hiểu ứng dụng của mình sẽ hoạt động như thế nào trong quá trình sản xuất. Bạn nên phát triển một cách tiếp cận nhất quán, có thể lặp lại để quản lý môi trường triển khai của mình để bạn có thể giảm thiểu bất kỳ sự bất ngờ nào khi bạn đang sản xuất Cách tiếp cận tốt nhất là kết hợp tạo nguyên mẫu thiết lập của bạn, tiến hành kiểm tra tải, theo dõi các chỉ số chính và sử dụng thông tin đó để mở rộng quy mô thiết lập của bạn. Phần quan trọng của phương pháp này là chủ động giám sát toàn bộ hệ thống của bạn - điều này sẽ giúp bạn hiểu hệ thống sản xuất của mình sẽ hoạt động như thế nào trước khi triển khai và xác định nơi bạn sẽ cần bổ sung công suất. Chẳng hạn, có cái nhìn sâu sắc về các đột biến tiềm năng trong việc sử dụng bộ nhớ của bạn, có thể giúp dập tắt một vụ cháy khóa ghi trước khi nó bắt đầu Để theo dõi quá trình triển khai của bạn, MongoDB cung cấp một số lệnh sau – mongostatLệnh này kiểm tra trạng thái của tất cả các phiên bản mongod đang chạy và trả về bộ đếm của các hoạt động cơ sở dữ liệu. Các bộ đếm này bao gồm chèn, truy vấn, cập nhật, xóa và con trỏ. Lệnh cũng hiển thị khi bạn gặp lỗi trang và hiển thị phần trăm khóa của bạn. Điều này có nghĩa là bạn sắp hết bộ nhớ, đạt đến khả năng ghi hoặc có một số vấn đề về hiệu suất Để chạy lệnh, hãy bắt đầu phiên bản mongod của bạn. Trong một dấu nhắc lệnh khác, hãy chuyển đến thư mục bin của bản cài đặt mongodb của bạn và nhập mongostat sudo apt-get update0 Sau đây là đầu ra của lệnh - cầy mangutLệnh này theo dõi và báo cáo hoạt động đọc và ghi của phiên bản MongoDB trên cơ sở bộ sưu tập. Theo mặc định, mongotop trả về thông tin theo từng giây, bạn có thể thay đổi thông tin này cho phù hợp. Bạn nên kiểm tra xem hoạt động đọc và ghi này có phù hợp với mục đích ứng dụng của bạn không và bạn không ghi quá nhiều lần ghi vào cơ sở dữ liệu cùng một lúc, đọc quá thường xuyên từ đĩa hoặc vượt quá kích thước cài đặt làm việc của bạn Để chạy lệnh, hãy bắt đầu phiên bản mongod của bạn. Trong một dấu nhắc lệnh khác, hãy chuyển đến thư mục bin của bản cài đặt mongodb của bạn và nhập mongotop sudo apt-get update1 Sau đây là đầu ra của lệnh - Để thay đổi lệnh mongotop để trả về thông tin ít thường xuyên hơn, hãy chỉ định một số cụ thể sau lệnh mongotop sudo apt-get update2 Ví dụ trên sẽ trả về giá trị cứ sau 30 giây Ngoài các công cụ MongoDB, 10gen còn cung cấp dịch vụ giám sát được lưu trữ miễn phí, Dịch vụ quản lý MongoDB (MMS), cung cấp bảng điều khiển và cung cấp cho bạn chế độ xem các số liệu từ toàn bộ cụm của bạn Trong chương này, chúng ta sẽ tìm hiểu cách thiết lập trình điều khiển MongoDB JDBC Cài đặtTrước khi bạn bắt đầu sử dụng MongoDB trong các chương trình Java của mình, bạn cần đảm bảo rằng bạn đã cài đặt trình điều khiển JDBC MongoDB và Java trên máy. Bạn có thể xem hướng dẫn Java để cài đặt Java trên máy của mình. Bây giờ, hãy để chúng tôi kiểm tra cách thiết lập trình điều khiển MongoDB JDBC
Kết nối với cơ sở dữ liệuĐể kết nối cơ sở dữ liệu, bạn cần chỉ định tên cơ sở dữ liệu, nếu cơ sở dữ liệu không tồn tại thì MongoDB sẽ tự động tạo nó Sau đây là đoạn mã để kết nối với cơ sở dữ liệu - sudo apt-get update3 Bây giờ, hãy biên dịch và chạy chương trình trên để tạo cơ sở dữ liệu myDb của chúng tôi như hình bên dưới sudo apt-get update4 Khi thực thi, chương trình trên cung cấp cho bạn đầu ra sau sudo apt-get update5 Tạo Bộ sưu tậpĐể tạo một bộ sưu tập, phương thức createCollection() của com. mongodb. khách hàng. Lớp MongoDatabase được sử dụng Sau đây là đoạn mã để tạo một bộ sưu tập - sudo apt-get update6 Khi biên dịch, chương trình trên cho bạn kết quả sau - sudo apt-get update7 Lấy/Chọn một Bộ sưu tậpĐể lấy/chọn một bộ sưu tập từ cơ sở dữ liệu, phương thức getCollection() của com. mongodb. khách hàng. Lớp MongoDatabase được sử dụng Sau đây là chương trình lấy/chọn một bộ sưu tập - sudo apt-get update8 Khi biên dịch, chương trình trên cho bạn kết quả sau - sudo apt-get update9 Chèn một tài liệuĐể chèn một tài liệu vào MongoDB, phương thức insert() của com. mongodb. khách hàng. lớp MongoCollection được sử dụng Sau đây là đoạn mã để chèn một tài liệu - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>00 Khi biên dịch, chương trình trên cho bạn kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>01 Truy xuất tất cả tài liệuĐể chọn tất cả các tài liệu từ bộ sưu tập, phương thức find() của com. mongodb. khách hàng. lớp MongoCollection được sử dụng. Phương thức này trả về một con trỏ, vì vậy bạn cần lặp lại con trỏ này Sau đây là chương trình để chọn tất cả các tài liệu - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>02 Khi biên dịch, chương trình trên cho bạn kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>03 Cập nhật tài liệuĐể cập nhật tài liệu từ bộ sưu tập, phương thức updateOne() của com. mongodb. khách hàng. lớp MongoCollection được sử dụng Sau đây là chương trình để chọn tài liệu đầu tiên - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>04 Khi biên dịch, chương trình trên cho bạn kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>05 Xóa một tài liệuĐể xóa một tài liệu khỏi bộ sưu tập, bạn cần sử dụng phương thức deleteOne() của com. mongodb. khách hàng. lớp MongoCollection Sau đây là chương trình xóa một tài liệu - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>06 Khi biên dịch, chương trình trên cho bạn kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>07 Thả một bộ sưu tậpĐể xóa một bộ sưu tập khỏi cơ sở dữ liệu, bạn cần sử dụng phương thức drop() của com. mongodb. khách hàng. lớp MongoCollection Sau đây là chương trình xóa một bộ sưu tập - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>08 Khi biên dịch, chương trình trên cho bạn kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>09 Liệt kê tất cả các bộ sưu tậpĐể liệt kê tất cả các bộ sưu tập trong cơ sở dữ liệu, bạn cần sử dụng phương thức listCollectionNames() của com. mongodb. khách hàng. lớp Cơ sở dữ liệu Mongo Sau đây là chương trình liệt kê tất cả các bộ sưu tập của cơ sở dữ liệu - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>10 Khi biên dịch, chương trình trên cho bạn kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>11 Các phương thức MongoDB còn lại save(), limit(), skip(), sort(), v.v. làm việc tương tự như được giải thích trong hướng dẫn tiếp theo Để sử dụng MongoDB với PHP, bạn cần sử dụng trình điều khiển MongoDB PHP. Tải xuống trình điều khiển từ url Tải xuống trình điều khiển PHP. Đảm bảo tải xuống bản phát hành mới nhất của nó. Bây giờ hãy giải nén kho lưu trữ và đặt php_mongo. dll trong thư mục tiện ích mở rộng PHP của bạn ("ext" theo mặc định) và thêm dòng sau vào tệp php của bạn. tập tin ini - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>12 Tạo kết nối và chọn cơ sở dữ liệuĐể tạo kết nối, bạn cần chỉ định tên cơ sở dữ liệu, nếu cơ sở dữ liệu không tồn tại thì MongoDB sẽ tự động tạo nó Sau đây là đoạn mã để kết nối với cơ sở dữ liệu - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>13 Khi chương trình được thực thi, nó sẽ tạo ra kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>14 Tạo Bộ sưu tậpSau đây là đoạn mã để tạo một bộ sưu tập - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>15 Khi chương trình được thực thi, nó sẽ tạo ra kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>16 Chèn một tài liệuĐể chèn một tài liệu vào MongoDB, phương thức insert() được sử dụng Sau đây là đoạn mã để chèn một tài liệu - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>17 Khi chương trình được thực thi, nó sẽ tạo ra kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>18 Tìm tất cả tài liệuĐể chọn tất cả các tài liệu từ bộ sưu tập, phương thức find() được sử dụng Sau đây là đoạn mã để chọn tất cả các tài liệu - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>19 Khi chương trình được thực thi, nó sẽ tạo ra kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>20 Cập nhật tài liệuĐể cập nhật tài liệu, bạn cần sử dụng phương thức update() Trong ví dụ sau, chúng tôi sẽ cập nhật tiêu đề của tài liệu được chèn vào Hướng dẫn MongoDB. Sau đây là đoạn mã để cập nhật tài liệu - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>21 Khi chương trình được thực thi, nó sẽ tạo ra kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>22 Xóa một tài liệuĐể xóa một tài liệu, bạn cần sử dụng phương thức remove() Trong ví dụ sau, chúng tôi sẽ xóa các tài liệu có tiêu đề Hướng dẫn MongoDB. Sau đây là đoạn mã để xóa một tài liệu - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>23 Khi chương trình được thực thi, nó sẽ tạo ra kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>24 Trong ví dụ trên, tham số thứ hai là kiểu boolean và được sử dụng cho trường justOne của phương thức remove() Các phương thức MongoDB còn lại findOne(), save(), limit(), skip(), sort(), v.v. hoạt động giống như giải thích ở trên Các mối quan hệ trong MongoDB thể hiện cách các tài liệu khác nhau có liên quan logic với nhau. Các mối quan hệ có thể được mô hình hóa thông qua các phương pháp được nhúng và tham chiếu. Những mối quan hệ như vậy có thể là 1. 1, 1. N, N. 1 hoặc N. N Chúng ta hãy xem xét trường hợp lưu trữ địa chỉ cho người dùng. Vì vậy, một người dùng có thể có nhiều địa chỉ làm cho địa chỉ này trở thành 1. mối quan hệ N Sau đây là cấu trúc tài liệu mẫu của tài liệu người dùng - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>25 Sau đây là cấu trúc tài liệu mẫu của tài liệu địa chỉ - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>26 Mô hình hóa các mối quan hệ nhúngTrong cách tiếp cận nhúng, chúng tôi sẽ nhúng tài liệu địa chỉ bên trong tài liệu người dùng C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>27 Cách tiếp cận này duy trì tất cả dữ liệu liên quan trong một tài liệu duy nhất, giúp dễ dàng truy xuất và bảo trì. Toàn bộ tài liệu có thể được truy xuất trong một truy vấn, chẳng hạn như - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>28 Lưu ý rằng trong truy vấn trên, db và người dùng lần lượt là cơ sở dữ liệu và bộ sưu tập Hạn chế là nếu tài liệu được nhúng tiếp tục tăng kích thước quá nhiều, nó có thể ảnh hưởng đến hiệu suất đọc/ghi Mô hình hóa các mối quan hệ được tham chiếuĐây là cách tiếp cận thiết kế mối quan hệ chuẩn hóa. Theo cách tiếp cận này, cả tài liệu người dùng và địa chỉ sẽ được duy trì riêng nhưng tài liệu người dùng sẽ chứa một trường sẽ tham chiếu trường id của tài liệu địa chỉ C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>29 Như đã trình bày ở trên, tài liệu người dùng chứa trường mảng address_ids chứa ObjectId của các địa chỉ tương ứng. Sử dụng các ObjectId này, chúng tôi có thể truy vấn các tài liệu địa chỉ và nhận thông tin chi tiết về địa chỉ từ đó. Với cách tiếp cận này, chúng ta sẽ cần hai truy vấn. đầu tiên để tìm nạp các trường address_ids từ tài liệu người dùng và thứ hai để tìm nạp các địa chỉ này từ bộ sưu tập địa chỉ C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>30 Như đã thấy trong chương trước về mối quan hệ MongoDB, để triển khai cấu trúc cơ sở dữ liệu được chuẩn hóa trong MongoDB, chúng tôi sử dụng khái niệm Mối quan hệ được tham chiếu còn được gọi là Tài liệu tham khảo thủ công trong đó chúng tôi lưu trữ id của tài liệu được tham chiếu theo cách thủ công bên trong tài liệu khác. Tuy nhiên, trong trường hợp tài liệu chứa các tham chiếu từ các bộ sưu tập khác nhau, chúng ta có thể sử dụng MongoDB DBRefs DBRefs so với Tài liệu tham khảo thủ côngNhư một tình huống ví dụ, nơi chúng tôi sẽ sử dụng DBRef thay vì tham chiếu thủ công, hãy xem xét cơ sở dữ liệu nơi chúng tôi đang lưu trữ các loại địa chỉ khác nhau (nhà riêng, văn phòng, gửi thư, v.v. ) trong các bộ sưu tập khác nhau (address_home, address_office, address_mailing, v.v.). Giờ đây, khi tài liệu của bộ sưu tập người dùng tham chiếu đến một địa chỉ, nó cũng cần chỉ định bộ sưu tập nào sẽ xem xét dựa trên loại địa chỉ. Trong các tình huống như vậy khi một tài liệu tham chiếu các tài liệu từ nhiều bộ sưu tập, chúng ta nên sử dụng DBRefs Sử dụng DBRefCó ba trường trong DBRefs -
Hãy xem xét một tài liệu người dùng mẫu có địa chỉ trường DBRef như được hiển thị trong đoạn mã - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>31 Trường địa chỉ DBRef ở đây chỉ định rằng tài liệu địa chỉ được tham chiếu nằm trong bộ sưu tập address_home trong cơ sở dữ liệu tutorialspoint và có id là 534009e4d852427820000002 Đoạn mã sau tự động tìm trong bộ sưu tập được chỉ định bởi tham số $ref (address_home trong trường hợp của chúng tôi) để tìm tài liệu có id như được chỉ định bởi tham số $id trong DBRef C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>32 Đoạn mã trên trả về tài liệu địa chỉ sau có trong bộ sưu tập address_home - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>33 Trong chương này, chúng ta sẽ tìm hiểu về các truy vấn được bảo hiểm Truy vấn được bảo hiểm là gì?Theo tài liệu chính thức của MongoDB, một truy vấn được bảo hiểm là một truy vấn trong đó -
Vì tất cả các trường có trong truy vấn là một phần của chỉ mục, MongoDB khớp với các điều kiện truy vấn và trả về kết quả bằng cách sử dụng cùng một chỉ mục mà không thực sự nhìn vào bên trong tài liệu. Vì các chỉ mục có trong RAM, nên việc tìm nạp dữ liệu từ các chỉ mục nhanh hơn nhiều so với việc tìm nạp dữ liệu bằng cách quét tài liệu Sử dụng truy vấn được bảo hiểmĐể kiểm tra các truy vấn được bảo hiểm, hãy xem xét tài liệu sau trong bộ sưu tập người dùng - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>34 Trước tiên, chúng tôi sẽ tạo một chỉ mục phức hợp cho bộ sưu tập người dùng trên các trường giới tính và tên người dùng bằng cách sử dụng truy vấn sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>35 Bây giờ, chỉ mục này sẽ bao gồm truy vấn sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>36 Điều đó có nghĩa là đối với truy vấn trên, MongoDB sẽ không xem xét các tài liệu cơ sở dữ liệu. Thay vào đó, nó sẽ lấy dữ liệu cần thiết từ dữ liệu được lập chỉ mục rất nhanh Vì chỉ mục của chúng tôi không bao gồm trường _id, nên chúng tôi đã loại trừ rõ ràng nó khỏi tập kết quả của truy vấn, vì MongoDB theo mặc định trả về trường _id trong mọi truy vấn. Vì vậy, truy vấn sau đây sẽ không được đề cập bên trong chỉ mục được tạo ở trên - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>37 Cuối cùng, hãy nhớ rằng một chỉ mục không thể bao gồm một truy vấn nếu -
Phân tích truy vấn là một khía cạnh rất quan trọng trong việc đo lường mức độ hiệu quả của cơ sở dữ liệu và thiết kế lập chỉ mục. Chúng ta sẽ tìm hiểu về các truy vấn $explain và $hint thường được sử dụng Sử dụng $explainToán tử $explain cung cấp thông tin về truy vấn, chỉ mục được sử dụng trong truy vấn và các thống kê khác. Nó rất hữu ích khi phân tích các chỉ mục của bạn được tối ưu hóa tốt như thế nào Trong chương trước, chúng ta đã tạo chỉ mục cho bộ sưu tập người dùng trên các trường giới tính và tên người dùng bằng cách sử dụng truy vấn sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>35 Bây giờ chúng ta sẽ sử dụng $explain cho truy vấn sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>39 Truy vấn giải thích () ở trên trả về kết quả được phân tích sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>40 Bây giờ chúng ta sẽ xem xét các trường trong tập kết quả này -
Sử dụng gợi ý $Toán tử $hint buộc trình tối ưu hóa truy vấn sử dụng chỉ mục đã chỉ định để chạy truy vấn. Điều này đặc biệt hữu ích khi bạn muốn kiểm tra hiệu suất của truy vấn với các chỉ mục khác nhau. Ví dụ: truy vấn sau chỉ định chỉ mục trên các trường giới tính và user_name sẽ được sử dụng cho truy vấn này - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>41 Để phân tích truy vấn trên bằng cách sử dụng $explain - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>42 Dữ liệu mô hình cho các hoạt động nguyên tửCách tiếp cận được đề xuất để duy trì tính nguyên tử là giữ tất cả thông tin liên quan, được cập nhật thường xuyên cùng nhau trong một tài liệu duy nhất bằng cách sử dụng tài liệu nhúng. Điều này sẽ đảm bảo rằng tất cả các bản cập nhật cho một tài liệu là nguyên tử Xem xét tài liệu sản phẩm sau đây - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>43 Trong tài liệu này, chúng tôi đã nhúng thông tin của khách hàng mua sản phẩm vào trường product_bought_by. Bây giờ, bất cứ khi nào có khách hàng mới mua sản phẩm, trước tiên chúng tôi sẽ kiểm tra xem sản phẩm có còn hàng hay không bằng cách sử dụng trường product_available. Nếu có, chúng tôi sẽ giảm giá trị của trường product_available cũng như chèn tài liệu được nhúng của khách hàng mới vào trường product_bought_by. Chúng tôi sẽ sử dụng lệnh findAndModify cho chức năng này vì nó tìm kiếm và cập nhật tài liệu trong cùng một lần C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>44 Cách tiếp cận tài liệu nhúng của chúng tôi và sử dụng truy vấn findAndModify đảm bảo rằng thông tin mua sản phẩm chỉ được cập nhật nếu sản phẩm đó có sẵn. Và toàn bộ giao dịch này nằm trong cùng một truy vấn, là nguyên tử Ngược lại với điều này, hãy xem xét tình huống mà chúng tôi có thể giữ riêng tình trạng sẵn có của sản phẩm và thông tin về người đã mua sản phẩm. Trong trường hợp này, trước tiên chúng tôi sẽ kiểm tra xem sản phẩm có sẵn hay không bằng truy vấn đầu tiên. Sau đó, trong truy vấn thứ hai, chúng tôi sẽ cập nhật thông tin mua hàng. Tuy nhiên, có thể giữa các lần thực hiện hai truy vấn này, một số người dùng khác đã mua sản phẩm và sản phẩm đó không còn nữa. Nếu không biết điều này, truy vấn thứ hai của chúng tôi sẽ cập nhật thông tin mua hàng dựa trên kết quả của truy vấn đầu tiên của chúng tôi. Điều này sẽ làm cho cơ sở dữ liệu không nhất quán vì chúng tôi đã bán một sản phẩm không có sẵn Hãy xem xét tài liệu sau đây của bộ sưu tập người dùng - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>45 Tài liệu trên chứa một tài liệu phụ địa chỉ và một mảng thẻ Lập chỉ mục các trường mảngGiả sử chúng tôi muốn tìm kiếm tài liệu người dùng dựa trên thẻ của người dùng. Đối với điều này, chúng tôi sẽ tạo một chỉ mục trên mảng thẻ trong bộ sưu tập Tạo một chỉ mục trên mảng lần lượt tạo các mục nhập chỉ mục riêng cho từng trường của nó. Vì vậy, trong trường hợp của chúng tôi khi chúng tôi tạo một chỉ mục trên mảng thẻ, các chỉ mục riêng biệt sẽ được tạo cho các giá trị âm nhạc, cricket và blog của nó Để tạo chỉ mục trên mảng thẻ, hãy sử dụng đoạn mã sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>46 Sau khi tạo chỉ mục, chúng ta có thể tìm kiếm trên trường thẻ của bộ sưu tập như thế này - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>47 Để xác minh rằng lập chỉ mục thích hợp được sử dụng, hãy sử dụng lệnh giải thích sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>48 Lệnh trên dẫn đến "con trỏ". "BtreeCursor tags_1" xác nhận rằng việc lập chỉ mục thích hợp được sử dụng Lập chỉ mục các trường tài liệu conGiả sử rằng chúng tôi muốn tìm kiếm tài liệu dựa trên các trường thành phố, tiểu bang và mã pin. Vì tất cả các trường này là một phần của trường tài liệu phụ địa chỉ, chúng tôi sẽ tạo một chỉ mục trên tất cả các trường của tài liệu phụ Để tạo một chỉ mục trên cả ba trường của tài liệu con, hãy sử dụng đoạn mã sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>49 Khi chỉ mục được tạo, chúng ta có thể tìm kiếm bất kỳ trường tài liệu phụ nào sử dụng chỉ mục này như sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>50 Hãy nhớ rằng biểu thức truy vấn phải tuân theo thứ tự của chỉ mục được chỉ định. Vì vậy, chỉ mục được tạo ở trên sẽ hỗ trợ các truy vấn sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>51 Nó cũng sẽ hỗ trợ truy vấn sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>52 Trong chương này, chúng ta sẽ tìm hiểu về Giới hạn lập chỉ mục và các thành phần khác của nó chi phí bổ sungMỗi chỉ mục chiếm một số không gian cũng như gây ra chi phí trên mỗi lần chèn, cập nhật và xóa. Vì vậy, nếu bạn hiếm khi sử dụng bộ sưu tập của mình cho các thao tác đọc, bạn không nên sử dụng các chỉ mục Sử dụng RAMVì các chỉ mục được lưu trữ trong RAM, bạn nên đảm bảo rằng tổng kích thước của chỉ mục không vượt quá giới hạn RAM. Nếu tổng kích thước tăng kích thước RAM, nó sẽ bắt đầu xóa một số chỉ mục, gây giảm hiệu suất Giới hạn truy vấnLập chỉ mục không thể được sử dụng trong các truy vấn sử dụng -
Do đó, luôn luôn nên kiểm tra việc sử dụng chỉ mục cho các truy vấn của bạn Giới hạn chính của chỉ mụcBắt đầu từ phiên bản 2. 6, MongoDB sẽ không tạo chỉ mục nếu giá trị của trường chỉ mục hiện tại vượt quá giới hạn khóa chỉ mục Chèn tài liệu vượt quá giới hạn khóa chỉ mụcMongoDB sẽ không chèn bất kỳ tài liệu nào vào bộ sưu tập được lập chỉ mục nếu giá trị trường được lập chỉ mục của tài liệu này vượt quá giới hạn khóa chỉ mục. Tương tự với các tiện ích mongorestore và mongoimport Phạm vi tối đa
Chúng ta đã sử dụng MongoDB Object Id trong tất cả các chương trước. Trong chương này, chúng ta sẽ tìm hiểu cấu trúc của ObjectId ObjectId là loại BSON 12 byte có cấu trúc như sau -
MongoDB sử dụng ObjectIds làm giá trị mặc định của trường _id của mỗi tài liệu, được tạo trong khi tạo bất kỳ tài liệu nào. Sự kết hợp phức tạp của ObjectId làm cho tất cả các trường _id trở nên độc nhất Tạo ObjectId mớiĐể tạo một ObjectId mới, hãy sử dụng đoạn mã sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>53 Câu lệnh trên trả về id được tạo duy nhất sau đây - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>54 Thay vì MongoDB tạo ObjectId, bạn cũng có thể cung cấp id 12 byte - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>55 Tạo dấu thời gian của tài liệuVì _id ObjectId theo mặc định lưu trữ dấu thời gian 4 byte, nên trong hầu hết các trường hợp, bạn không cần lưu trữ thời gian tạo của bất kỳ tài liệu nào. Bạn có thể lấy thời gian tạo tài liệu bằng phương thức getTimestamp - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>56 Điều này sẽ trả về thời gian tạo tài liệu này ở định dạng ngày ISO - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>57 Chuyển đổi ObjectId thành ChuỗiTrong một số trường hợp, bạn có thể cần giá trị của ObjectId ở định dạng chuỗi. Để chuyển đổi ObjectId thành chuỗi, hãy sử dụng đoạn mã sau – C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>58 Đoạn mã trên sẽ trả về định dạng chuỗi của Hướng dẫn - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>59 Theo tài liệu MongoDB, Map-reduce là một mô hình xử lý dữ liệu để cô đọng khối lượng dữ liệu lớn thành các kết quả tổng hợp hữu ích. MongoDB sử dụng lệnh mapReduce cho các thao tác thu nhỏ bản đồ. MapReduce thường được sử dụng để xử lý các tập dữ liệu lớn Lệnh MapReduceSau đây là cú pháp của lệnh mapReduce cơ bản - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>60 Trước tiên, hàm map-reduce truy vấn bộ sưu tập, sau đó ánh xạ các tài liệu kết quả để phát ra các cặp khóa-giá trị, sau đó được giảm dựa trên các khóa có nhiều giá trị Trong cú pháp trên -
Sử dụng MapReduceXem xét cấu trúc tài liệu sau lưu trữ bài đăng của người dùng. Tài liệu lưu trữ user_name của người dùng và trạng thái của bài đăng C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>61 Bây giờ, chúng ta sẽ sử dụng hàm mapReduce trên bộ sưu tập bài đăng của mình để chọn tất cả các bài đăng đang hoạt động, nhóm chúng trên cơ sở user_name và sau đó đếm số lượng bài đăng của mỗi người dùng bằng đoạn mã sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>62 Truy vấn mapReduce ở trên đưa ra kết quả sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>63 Kết quả cho thấy có tổng cộng 4 tài liệu phù hợp với truy vấn (trạng thái. "hoạt động"), chức năng bản đồ đã tạo ra 4 tài liệu với các cặp khóa-giá trị và cuối cùng chức năng giảm đã nhóm các tài liệu được ánh xạ có cùng khóa thành 2 Để xem kết quả của truy vấn mapReduce này, hãy sử dụng toán tử tìm - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>64 Truy vấn trên đưa ra kết quả sau cho biết rằng cả người dùng tom và mark đều có hai bài đăng ở trạng thái hoạt động - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>65 Theo cách tương tự, các truy vấn MapReduce có thể được sử dụng để xây dựng các truy vấn tổng hợp phức tạp lớn. Việc sử dụng các chức năng Javascript tùy chỉnh sử dụng MapReduce rất linh hoạt và mạnh mẽ Bắt đầu từ phiên bản 2. 4, MongoDB bắt đầu hỗ trợ các chỉ mục văn bản để tìm kiếm bên trong nội dung chuỗi. Tìm kiếm văn bản sử dụng các kỹ thuật bắt đầu từ gốc để tìm kiếm các từ được chỉ định trong các trường chuỗi bằng cách loại bỏ các từ dừng gốc như a, an, the, v.v. Hiện tại, MongoDB hỗ trợ khoảng 15 ngôn ngữ Kích hoạt tìm kiếm văn bảnBan đầu, Tìm kiếm văn bản là một tính năng thử nghiệm nhưng bắt đầu từ phiên bản 2. 6, cấu hình được bật theo mặc định. Nhưng nếu bạn đang sử dụng phiên bản MongoDB trước đó, bạn phải bật tìm kiếm văn bản bằng đoạn mã sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>66 Tạo chỉ mục văn bảnXem xét tài liệu sau trong tuyển tập bài viết có chứa văn bản bài đăng và các thẻ của nó - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>67 Chúng tôi sẽ tạo một chỉ mục văn bản trên trường post_text để chúng tôi có thể tìm kiếm bên trong văn bản của bài đăng của mình - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>68 Sử dụng chỉ mục văn bảnBây giờ chúng tôi đã tạo chỉ mục văn bản trên trường post_text, chúng tôi sẽ tìm kiếm tất cả các bài đăng có từ hướng dẫn điểm trong văn bản của họ C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>69 Lệnh trên trả về các tài liệu kết quả sau đây có từ tutorialspoint trong văn bản bài đăng của chúng - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>70 Nếu bạn đang sử dụng các phiên bản cũ của MongoDB, bạn phải sử dụng lệnh sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>71 Sử dụng Tìm kiếm văn bản cải thiện đáng kể hiệu quả tìm kiếm so với tìm kiếm thông thường Xóa chỉ mục văn bảnĐể xóa một chỉ mục văn bản hiện có, trước tiên hãy tìm tên của chỉ mục bằng truy vấn sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>72 Sau khi nhận được tên chỉ mục của bạn từ truy vấn trên, hãy chạy lệnh sau. Ở đây, post_text_text là tên của chỉ mục C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>73 Biểu thức chính quy thường được sử dụng trong tất cả các ngôn ngữ để tìm kiếm một mẫu hoặc từ trong bất kỳ chuỗi nào. MongoDB cũng cung cấp chức năng của biểu thức chính quy để so khớp mẫu chuỗi bằng cách sử dụng toán tử $regex. MongoDB sử dụng PCRE (Biểu thức chính quy tương thích Perl) làm ngôn ngữ biểu thức chính quy Không giống như tìm kiếm văn bản, chúng ta không cần thực hiện bất kỳ cấu hình hoặc lệnh nào để sử dụng các biểu thức chính quy Xem xét cấu trúc tài liệu sau trong tuyển tập bài viết có chứa văn bản bài đăng và các thẻ của nó - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>67 Sử dụng biểu thức regexTruy vấn regex sau đây tìm kiếm tất cả các bài viết có chứa chuỗi tutorialspoint trong đó - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>75 Truy vấn tương tự cũng có thể được viết là - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>76 Sử dụng Biểu thức regex không phân biệt chữ hoa chữ thườngĐể làm cho trường hợp tìm kiếm không nhạy cảm, chúng tôi sử dụng tham số $options với giá trị $i. Lệnh sau sẽ tìm kiếm các chuỗi có từ tutorialspoint, bất kể chữ hoa hay chữ thường - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>77 Một trong những kết quả được trả về từ truy vấn này là tài liệu sau có chứa từ hướng dẫn trong các trường hợp khác nhau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>78 Sử dụng regex cho các phần tử mảngChúng ta cũng có thể sử dụng khái niệm regex trên trường mảng. Điều này đặc biệt rất quan trọng khi chúng tôi triển khai chức năng của các thẻ. Vì vậy, nếu bạn muốn tìm kiếm tất cả các bài đăng có thẻ bắt đầu từ từ hướng dẫn (hướng dẫn hoặc hướng dẫn hoặc điểm hướng dẫn hoặc hướng dẫn php), bạn có thể sử dụng đoạn mã sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>79 Tối ưu hóa truy vấn biểu thức chính quy
RockMongo là một công cụ quản trị MongoDB mà bạn có thể quản lý máy chủ, cơ sở dữ liệu, bộ sưu tập, tài liệu, chỉ mục, v.v. Nó cung cấp một cách rất thân thiện với người dùng để đọc, viết và tạo tài liệu. Nó tương tự như công cụ PHPMyAdmin cho PHP và MySQL Đang tải xuống RockMongoBạn có thể tải xuống phiên bản mới nhất của RockMongo từ đây. https. //github. com/iwind/rockmongo Cài đặt RockMongoSau khi tải xuống, bạn có thể giải nén gói trong thư mục gốc của máy chủ và đổi tên thư mục đã giải nén thành rockmongo. Mở bất kỳ trình duyệt web nào và truy cập chỉ mục. trang php từ thư mục rockmongo. Nhập admin/admin làm tên người dùng/mật khẩu tương ứng Làm việc với RockMongoBây giờ chúng ta sẽ xem xét một số thao tác cơ bản mà bạn có thể thực hiện với RockMongo Tạo cơ sở dữ liệu mớiĐể tạo cơ sở dữ liệu mới, hãy nhấp vào tab Cơ sở dữ liệu. Nhấp vào Tạo cơ sở dữ liệu mới. Trên màn hình tiếp theo, cung cấp tên của cơ sở dữ liệu mới và nhấp vào Tạo. Bạn sẽ thấy một cơ sở dữ liệu mới được thêm vào trong bảng điều khiển bên trái Tạo bộ sưu tập mớiĐể tạo một bộ sưu tập mới bên trong cơ sở dữ liệu, hãy nhấp vào cơ sở dữ liệu đó từ bảng điều khiển bên trái. Nhấp vào liên kết Bộ sưu tập mới trên đầu trang. Cung cấp tên bắt buộc của bộ sưu tập. Đừng lo lắng về các trường khác của Is Capped, Size và Max. Nhấp vào Tạo. Một bộ sưu tập mới sẽ được tạo và bạn có thể nhìn thấy nó trong bảng điều khiển bên trái Tạo tài liệu mớiĐể tạo một tài liệu mới, hãy bấm vào bộ sưu tập mà bạn muốn thêm tài liệu. Khi bạn bấm vào một bộ sưu tập, bạn sẽ có thể xem tất cả các tài liệu trong bộ sưu tập đó được liệt kê ở đó. Để tạo một tài liệu mới, hãy nhấp vào liên kết Chèn ở trên cùng. Bạn có thể nhập dữ liệu của tài liệu ở định dạng JSON hoặc mảng và nhấp vào Lưu Xuất/Nhập dữ liệuĐể nhập/xuất dữ liệu của bất kỳ bộ sưu tập nào, hãy nhấp vào bộ sưu tập đó rồi nhấp vào liên kết Xuất/Nhập ở bảng trên cùng. Thực hiện theo các hướng dẫn tiếp theo để xuất dữ liệu của bạn ở định dạng zip, sau đó nhập cùng một tệp zip để nhập lại dữ liệu GridFS là đặc tả MongoDB để lưu trữ và truy xuất các tệp lớn như hình ảnh, tệp âm thanh, tệp video, v.v. Nó là một loại hệ thống tệp để lưu trữ tệp nhưng dữ liệu của nó được lưu trữ trong bộ sưu tập MongoDB. GridFS có khả năng lưu trữ các tệp thậm chí còn lớn hơn giới hạn kích thước tài liệu của nó là 16MB GridFS chia tệp thành các phần và lưu trữ từng phần dữ liệu trong một tài liệu riêng biệt, mỗi phần có kích thước tối đa 255k GridFS theo mặc định sử dụng hai bộ sưu tập fs. tập tin và fs. khối để lưu trữ siêu dữ liệu của tệp và các khối. Mỗi đoạn được xác định bởi trường _id ObjectId duy nhất của nó. các fs. các tệp đóng vai trò là tài liệu gốc. Trường files_id trong fs. tài liệu chunk liên kết chunk với cha của nó Sau đây là một tài liệu mẫu của fs. bộ sưu tập tệp - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>80 Tài liệu chỉ định tên tệp, kích thước khối, ngày tải lên và độ dài Sau đây là một tài liệu mẫu của fs. tài liệu khối - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>81 Thêm tệp vào GridFSBây giờ, chúng tôi sẽ lưu trữ một tệp mp3 bằng GridFS bằng lệnh put. Đối với điều này, chúng tôi sẽ sử dụng mongofiles. exe có trong thư mục bin của thư mục cài đặt MongoDB Mở dấu nhắc lệnh của bạn, điều hướng đến mongofiles. exe trong thư mục bin của thư mục cài đặt MongoDB và nhập mã sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>82 Ở đây, gridfs là tên của cơ sở dữ liệu mà tệp sẽ được lưu trữ. Nếu không có cơ sở dữ liệu, MongoDB sẽ tự động tạo một tài liệu mới một cách nhanh chóng. Bài hát. mp3 là tên của tệp được tải lên. Để xem tài liệu của tệp trong cơ sở dữ liệu, bạn có thể sử dụng truy vấn find - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>83 Lệnh trên trả về tài liệu sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>84 Chúng ta cũng có thể thấy tất cả các khối có trong fs. bộ sưu tập khối liên quan đến tệp được lưu trữ với mã sau, sử dụng id tài liệu được trả về trong truy vấn trước đó - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>85 Trong trường hợp của tôi, truy vấn trả về 40 tài liệu nghĩa là toàn bộ tài liệu mp3 được chia thành 40 khối dữ liệu Các bộ sưu tập được giới hạn là các bộ sưu tập hình tròn có kích thước cố định tuân theo thứ tự chèn để hỗ trợ hiệu suất cao cho các thao tác tạo, đọc và xóa. Theo thông tư, điều đó có nghĩa là khi hết kích thước cố định được phân bổ cho bộ sưu tập, nó sẽ bắt đầu xóa tài liệu cũ nhất trong bộ sưu tập mà không cung cấp bất kỳ lệnh rõ ràng nào Các bộ sưu tập được giới hạn hạn chế các bản cập nhật cho tài liệu nếu bản cập nhật dẫn đến kích thước tài liệu tăng lên. Vì các bộ sưu tập được giới hạn lưu trữ tài liệu theo thứ tự lưu trữ trên đĩa, nó đảm bảo rằng kích thước tài liệu không làm tăng kích thước được phân bổ trên đĩa. Các bộ sưu tập được giới hạn là tốt nhất để lưu trữ thông tin nhật ký, dữ liệu bộ đệm hoặc bất kỳ dữ liệu khối lượng lớn nào khác Tạo bộ sưu tập giới hạnĐể tạo một bộ sưu tập giới hạn, chúng tôi sử dụng lệnh createCollection bình thường nhưng với tùy chọn giới hạn là đúng và chỉ định kích thước tối đa của bộ sưu tập theo byte C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>86 Ngoài kích thước bộ sưu tập, chúng tôi cũng có thể giới hạn số lượng tài liệu trong bộ sưu tập bằng tham số max - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>87 Nếu bạn muốn kiểm tra xem một bộ sưu tập có bị giới hạn hay không, hãy sử dụng lệnh isCapped sau đây - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>88 Nếu có một bộ sưu tập hiện có mà bạn dự định chuyển đổi sang giới hạn, bạn có thể thực hiện điều đó bằng đoạn mã sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>89 Mã này sẽ chuyển đổi các bài đăng bộ sưu tập hiện tại của chúng tôi thành bộ sưu tập giới hạn Truy vấn bộ sưu tập giới hạnTheo mặc định, truy vấn tìm kiếm trên bộ sưu tập được giới hạn sẽ hiển thị kết quả theo thứ tự chèn. Nhưng nếu bạn muốn các tài liệu được truy xuất theo thứ tự ngược lại, hãy sử dụng lệnh sắp xếp như trong đoạn mã sau - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>90 Có một vài điểm quan trọng khác liên quan đến các bộ sưu tập giới hạn đáng để biết -
MongoDB không có chức năng tăng tự động vượt trội, như cơ sở dữ liệu SQL. Theo mặc định, nó sử dụng ObjectId 12 byte cho trường _id làm khóa chính để nhận dạng duy nhất các tài liệu. Tuy nhiên, có thể có các tình huống mà chúng ta có thể muốn trường _id có một số giá trị tăng tự động khác với ObjectId Vì đây không phải là một tính năng mặc định trong MongoDB, nên chúng tôi sẽ lập trình đạt được chức năng này bằng cách sử dụng bộ sưu tập bộ đếm theo đề xuất của tài liệu MongoDB Sử dụng bộ sưu tập truy cậpXem xét tài liệu sản phẩm sau. Chúng tôi muốn trường _id là một chuỗi số nguyên tăng dần tự động bắt đầu từ 1,2,3,4 cho đến n C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>91 Đối với điều này, hãy tạo một bộ sưu tập bộ đếm, bộ sưu tập này sẽ theo dõi giá trị chuỗi cuối cùng cho tất cả các trường chuỗi C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>92 Bây giờ, chúng ta sẽ chèn tài liệu sau vào bộ sưu tập counters với productid làm khóa của nó - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>93 Trường sequence_value theo dõi giá trị cuối cùng của chuỗi Sử dụng đoạn mã sau để chèn tài liệu trình tự này vào bộ sưu tập bộ đếm - C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>94 Tạo chức năng JavascriptBây giờ, chúng ta sẽ tạo một hàm getNextSequenceValue sẽ lấy tên dãy làm đầu vào, tăng số thứ tự lên 1 và trả về số thứ tự được cập nhật. Trong trường hợp của chúng tôi, tên trình tự là productid C:\>wmic os get osarchitecture OSArchitecture 64-bit C:\>95 Sử dụng chức năng JavascriptBây giờ chúng ta sẽ sử dụng hàm getNextSequenceValue trong khi tạo tài liệu mới và gán giá trị chuỗi được trả về làm trường _id của tài liệu |