Phép chiếu MongoDB
Mongo DB là một cơ sở dữ liệu định hướng tài liệu mã nguồn mở và NoSQL phổ biến, cho phép cấu trúc tài liệu linh hoạt và có khả năng mở rộng cao. Nó nhanh hơn RDBMS do các kỹ thuật lập chỉ mục và lưu trữ hiệu quả và là một giải pháp NoQuery, nó được thiết kế để xử lý một lượng lớn dữ liệu. Lý do MongoDB được sử dụng rộng rãi, nếu bạn muốn tận dụng tối đa công cụ này, hãy kiểm tra chứng chỉ chuyên nghiệp MongoDB. Show
Mặc dù khi bạn muốn tìm nạp thông tin có chọn lọc từ một số lượng lớn bản ghi, MongoDB sẽ xử lý rất nhiều dữ liệu không cần thiết, đồng thời gây áp lực lớn lên hiệu suất tổng thể của cơ sở dữ liệu. Để khắc phục những vấn đề như vậy, MongoDB cung cấp một tính năng đặc biệt được gọi là Phép chiếu MongoDB Phép chiếu MongoDB là gì?MongoDB Projection là một tính năng đặc biệt cho phép bạn chỉ chọn những dữ liệu cần thiết thay vì chọn toàn bộ dữ liệu từ tài liệu. Ví dụ: Nếu Tài liệu chứa 10 trường và chỉ có 5 trường được hiển thị thì có thể đạt được điều tương tự bằng cách sử dụng Phép chiếu. Điều này sẽ cho phép chúng tôi.
Hãy để chúng tôi kiểm tra một ví dụ để hiểu rõ hơn về cách hoạt động của phép chiếu. Đầu tiên, hãy làm quen với cách MongoDB lưu trữ dữ liệu, vì MongoDB không có lược đồ nên lưu trữ dữ liệu trong các tài liệu riêng biệt, ở đây bảng được ký hiệu là "Bộ sưu tập", một hàng là "Tài liệu" và cột có nghĩa là "Trường" Hãy xem xét bộ sưu tập sau đây cho một ví dụ về phép chiếu MongoDB, trong đó chúng tôi có một bộ dữ liệu về kho kiến thức của KnowledgeHut với một số tài liệu và trường được liên kết với chúng. Khi chúng tôi sử dụng lệnh find, chúng tôi tìm nạp tất cả tập dữ liệu từ bộ sưu tập như sau. db.knowledgeHutCollection.find().pretty() Ở đây chúng tôi đang tìm nạp tất cả dữ liệu mà DB của chúng tôi có mà không có bộ lọc. Ở phần sau của bài viết, chúng ta sẽ làm việc trên cùng một tập dữ liệu để thực hiện Phép chiếu MongoDB, nhưng bây giờ, trước tiên chúng ta hãy hiểu cách thức hoạt động của Phép chiếu. Phép chiếu MongoDB hoạt động như thế nào?Các phép chiếu MongoDB được xây dựng dựa trên truy vấn find() hiện có và do đó giúp sử dụng dễ dàng hơn mà không cần sửa đổi đáng kể các chức năng/truy vấn hiện có. Hơn nữa, phép chiếu đóng vai trò quan trọng khi tìm kiếm dữ liệu lấy người dùng làm trung tâm từ một tập dữ liệu lớn nhất định Cú pháp mẫu mà bạn có thể sử dụng để truy xuất lượng dữ liệu hạn chế bằng Phép chiếu trong MongoDB có thể được viết như sau. cú phápdb.DATA_COLLECTION_NAME.find({}, {YOUR_FIELD_KEY: BOOLEAN}) Hãy để chúng tôi chia nhỏ cú pháp này để hiểu mọi thứ một cách chi tiết.
Hãy để chúng tôi lấy ví dụ về knowledgeHutCollection mà chúng tôi đã thảo luận ở trên để hiểu độ sâu của phép chiếu bằng cách xử lý một số dữ liệu Chúng tôi đã viết một truy vấn cho ví dụ phép chiếu MongoDB sẽ truy xuất tất cả các bản ghi có sẵn trong bộ sưu tập đã chọn ở định dạng có thể đọc được với sự trợ giúp của pretty(), bạn có thể tìm lại truy vấn tương tự bên dưới. db. kiến thứcHutCollection. tìm thấy(). đẹp() Bây giờ chúng ta sẽ sử dụng Phép chiếu trên tài liệu này để chỉ định hoặc hạn chế các trường trả về. Nếu muốn trả lại tất cả các trường từ tất cả các tài liệu trong bộ sưu tập hàng tồn kho có trạng thái bằng "A", truy vấn sẽ giống như bên dưới. db.knowledgeHutCollection.find( { status: "A" } ) Kết quả sẽ giống như mục bên dưới. Để dễ hiểu thao tác này có thể hiểu như câu lệnh SQL sau. CHỌN * từ kiến thứcHutCollection WHERE status = "A" Mặc dù có nhiều điều chúng ta có thể làm với các phép chiếu, nhưng giả sử chúng ta chỉ muốn lấy một số trường liên quan từ tài liệu, Một phép chiếu cũng có thể kèm theo một cách rõ ràng một số trường bằng cách đặt theto 1 trong tài liệu phép chiếu db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } ) Trong tập hợp kết quả cho truy vấn trên, chỉ các trường mục và trạng thái được trả về trong các tài liệu phù hợp trong khi trường _id bị Bỏ qua Tương tự, thao tác này có thể được hiểu như câu lệnh SQL sau. CHỌN mục, trạng thái từ kiến thứcHutCollection WHERE status = "A" Chứng chỉ quản trị MongoDB có thể giúp bạn hiểu thêm về Lưu trữ dữ liệu và các chức năng khác liên quan đến MongoDB. Toán tử chiếu MongoDBPhương pháp chiếu MongoDB tác động tích cực đến hiệu suất cơ sở dữ liệu vì nó giảm khối lượng công việc của truy vấn tìm kiếm khi cố truy xuất dữ liệu cụ thể từ tài liệu, giảm thiểu việc sử dụng tài nguyên. Để tăng cường truy vấn và giảm khối lượng công việc, nhiều toán tử có thể được sử dụng trong một truy vấn chiếu như các truy vấn bên dưới. Hãy để chúng tôi đi sâu vào để hiểu sâu từng người. 1. $ Toán tửToán tử $ được sử dụng trong các tình huống cần giới hạn một mảng để chỉ chiếu phần tử đầu tiên khớp với điều kiện của truy vấn, nếu không có điều kiện truy vấn nào, phần tử đầu tiên được trả về trong mảng chiếu MongoDB đã chỉ định và . db.collection.find( { : .. }, { ".$": 1 } ) Thí dụ Hãy cùng chúng tôi xem Bộ sưu tập "sinh viên" lần này để hiểu hoạt động của toán tử $. db.students.find( { semester: 1, grades: { $gte: 85 } }, { "grades.$": 1 } ) Sử dụng toán tử $ sẽ chỉ trả về phần tử đầu tiên của phép chiếu MongoDB của mảng trong đó nó bằng hoặc lớn hơn 85. Hạn chế của toán tử $.
2. Toán tử $elemMatchTương tự như toán tử $, toán tử $elemMatch cũng giới hạn nội dung của một mảng đối với phần tử đầu tiên phù hợp với ràng buộc đã cho. Mặc dù vậy, có một sự khác biệt nhỏ so với toán tử $ bởi vì toán tử chiếu $elemMatch cần một đối số điều kiện rõ ràng. Cú pháp như sau. db.collection.find( { : .. }, { ".$elemMatch": ($elemMatch operator) } ) Thí dụ Bên dưới, bạn có thể kiểm tra bộ sưu tập "schoolsdData" mà chúng tôi sẽ sử dụng để minh họa toán tử $elemMatch. Chúng ta cần viết một thao tác trả về các tài liệu sau có mã zip bằng `63109` và chiếu mảng sinh viên bằng cách sử dụng $elemMatch. db.schools.find( { zipcode: "63109" }, { students: { $elemMatch: { school: 102 } } } ) Các hạn chế của toán tử $elemMatch như sau.
3. Toán tử chiếu $sliceToán tử $slice giới hạn số lượng phần tử sẽ được trả về dưới dạng đầu ra của truy vấn phép chiếu MongoDB. cú pháp. ________số 8Bây giờ chúng ta sẽ sử dụng bộ sưu tập "postsData" để minh họa toán tử $slice. Chúng tôi muốn lấy dữ liệu từ mảng nhận xét để trả về mảng có ba phần tử đầu tiên. Nếu mảng chứa ít hơn ba phần tử, tất cả các phần tử của mảng được trả về. db.posts.find( {}, { comments: { $slice: 3 } } ) Hạn chế trong toán tử $slice.
4. Toán tử $meta với các ví dụToán tử $meta cung cấp cho chúng tôi khả năng trích xuất siêu dữ liệu được liên kết với tài liệu. Cả Phép chiếu và Tập hợp MongoDB đều hỗ trợ toán tử $meta, tuy nhiên bây giờ chúng ta hãy đi sâu vào Phép chiếu. Toán tử $meta sử dụng cú pháp sau. db.DATA_COLLECTION_NAME.find({}, {YOUR_FIELD_KEY: BOOLEAN})0 "MetaDataKeyword", đại diện cho các giá trị này.
Bây giờ, hãy xem xét một số ví dụ về phép chiếu MongoDB của toán tử $meta. Đối với {$meta. "textScore"}, chúng tôi sẽ sử dụng bộ sưu tập bài viết như bên dưới. Trước tiên, chúng tôi thêm một chỉ mục vào Tài liệu và sau đó chúng tôi sử dụng toán tử meta textScore để bao gồm điểm số được gán cho từng tài liệu phù hợp. db.DATA_COLLECTION_NAME.find({}, {YOUR_FIELD_KEY: BOOLEAN})1 Cách sử dụng và Hạn chế của toán tử $meta trong phép chiếu.
Truy vấn phép chiếu với các ví dụChúng ta hãy xem xét một số truy vấn phép chiếu ví dụ trong phần này Không chỉ định các trường trong truy vấn tương tự như CHỌN * trong SQL. Nếu bạn chỉ muốn trả về một tập hợp con các trường, bạn sẽ chỉ định chúng trong mệnh đề CHỌN như bên dưới. CHỌN Id, tên, is_active TỪ khách hàng Điều này tương tự như trả về tất cả các trường trong Tài liệu phù hợp giống như một trong các truy vấn trên db.DATA_COLLECTION_NAME.find({}, {YOUR_FIELD_KEY: BOOLEAN})2 Hãy để chúng tôi kiểm tra một số ví dụ khác để hiểu các biến thể trong truy vấn 1. Chỉ trả lại các trường được chỉ địnhTrong trường hợp bạn chỉ cần trả lại các trường đã chỉ định từ một tài liệu, một số trường có thể được đưa vào một phép chiếu bằng cách đặt theto 1 trong tài liệu phép chiếu Một ví dụ chiếu MongoDB tốt có thể là Truy vấn bên dưới db.DATA_COLLECTION_NAME.find({}, {YOUR_FIELD_KEY: BOOLEAN})3 Tập hợp kết quả được liên kết với truy vấn này sẽ chỉ chứa các trường mục, trạng thái và _id (theo mặc định) trong các tài liệu phù hợp. 2. Trả lại tất cả các trường ngoại trừ bị loại trừTương tự, khi bạn muốn xóa hoặc chặn các trường trả về trong tài liệu phù hợp, các phép chiếu có thể được sử dụng để loại trừ các trường cụ thể. Ví dụ sau sẽ hiển thị tất cả các trường ngoại trừ trạng thái và các trường trong kho trong các tài liệu tương ứng. db.DATA_COLLECTION_NAME.find({}, {YOUR_FIELD_KEY: BOOLEAN})4 4. Trả lại các trường được chỉ định trong tài liệu được nhúngTrong một tài liệu được nhúng, một số trường nhất định có thể được trả về theo nhu cầu của tập kết quả. Để làm như vậy, hãy đặt trường nhúng trong tài liệu chiếu thành 1 và sử dụng ký hiệu dấu chấm để tham chiếu đến trường đó. Ví dụ sau trả về.
db.DATA_COLLECTION_NAME.find({}, {YOUR_FIELD_KEY: BOOLEAN})5 Bắt đầu từ MongoDB 4. 4, bạn cũng có thể chỉ định các trường được nhúng bằng cách sử dụng biểu mẫu lồng nhau, e. g. { mục. 1, trạng thái. 1, kích thước. { uôm. 1 } }. 5. Trả về các trường được chỉ định trong một tài liệu được nhúng trong một mảngĐể trả về các trường cụ thể ở định dạng mảng, bạn có thể sử dụng ký hiệu dấu chấm để lấy các trường dành riêng cho dự án từ bên trong các tài liệu được nhúng trong một mảng. Hãy để chúng tôi lấy ví dụ này chỉ định một phép chiếu để trả về.
Truy vấn tương tự đối với bộ sưu tập hàng tồn kho sẽ như sau. db.DATA_COLLECTION_NAME.find({}, {YOUR_FIELD_KEY: BOOLEAN})6 Sự kết luậnPhép chiếu hơi giống với việc sử dụng tên cột một cách rõ ràng trong SQL. Lý do có vẻ hơi phản trực giác khi sử dụng chúng để trả về một lượng dữ liệu nhỏ hơn và khi cơ sở dữ liệu của bạn phát triển, bạn có thể kiểm soát những gì bạn đang mang về với mỗi thao tác đọc/ghi thành công và do đó cải thiện hiệu suất. Chúng tôi hy vọng bài viết này sẽ làm sáng tỏ khái niệm về các phép chiếu trong MongoDB và cách sử dụng chúng để tạo các truy vấn MongoDB hiệu quả. Chứng nhận chuyên nghiệp MongoDB của KnowledgeHut bao gồm MongoDB Projection chuyên sâu. Câu hỏi thường gặp (FAQ)1. Trình chiếu MongoDB có cải thiện hiệu suất không?Có, Phép chiếu giúp giới hạn các trường trả về từ kết quả truy vấn, điều này có thể cải thiện hiệu suất vì những lý do sau.
2. Phép chiếu được sử dụng như thế nào trong la bàn MongoDB?Để đặt phép chiếu trong MongoDB Compass, hãy sử dụng các bước bên dưới
3. Làm cách nào để chiếu một mảng trong MongoDB?Đối với các trường chứa mảng, MongoDB cung cấp các toán tử chiếu sau để thao tác với mảng. $elemMatch, $slice và $. $elemMatch, $slice và $ là cách duy nhất cho các phần tử dành riêng cho dự án được bao gồm trong mảng được trả về. 4. Làm cách nào để tìm dữ liệu cụ thể trong MongoDB?Có các chức năng và truy vấn mà chúng ta có thể sử dụng để tìm dữ liệu cụ thể trong Tài liệu MongoDB, đáng chú ý là Find() và FindOne(), Ngoài ra, các phép chiếu có thể được sử dụng để tìm dữ liệu cụ thể trong Tài liệu. Phép chiếu trong MongoDB là gì?MongoDB Projection là một tính năng đặc biệt cho phép bạn chỉ chọn dữ liệu cần thiết thay vì chọn toàn bộ tập hợp dữ liệu từ tài liệu . Ví dụ: Nếu Tài liệu chứa 10 trường và chỉ có 5 trường được hiển thị thì có thể đạt được điều tương tự bằng cách sử dụng Phép chiếu.
Sự khác biệt giữa nhóm và dự án trong MongoDB là gì?$group được sử dụng để nhóm các tài liệu đầu vào theo biểu thức _id đã chỉ định và đối với mỗi nhóm riêng biệt, xuất ra một tài liệu. $project được sử dụng để chuyển các tài liệu có các trường được yêu cầu sang giai đoạn tiếp theo trong quy trình
__ V trong MongoDB là gì?__ V trong bộ sưu tập MongoDB là gì? . 24 Tháng Sáu, 2021. Trong Mongoose, trường “_v” là versionKey là thuộc tính được đặt trên mỗi tài liệu khi được Mongoose tạo lần đầu . Đây là một tài liệu được chèn qua mongo shell trong một bộ sưu tập và khóa-giá trị này chứa bản sửa đổi nội bộ của tài liệu. 24-Jun-2021. |