Làm cách nào để nắm bắt một trường cụ thể trong mongodb?
Giả sử chúng ta có một bộ sưu tập có nhiều dữ liệu trong một tài liệu. Chúng tôi có một bộ sưu tập db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()5. Chúng tôi sẽ chỉ chọn một vài lĩnh vực chúng tôi muốn, Show Bây giờ, tôi chỉ muốn chọn trường db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()6 và chỉ hiển thị kết quả với trường db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()6 Để làm được điều đó, trước tiên chúng ta cần hiểu cú pháp truy vấn mongoDB Bạn có thể truyền tham số thứ hai cho phương thức db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()8. Nó cũng sẽ hoạt động cho db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()9 Bây giờ, hãy chọn trường db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()6. Ở đây bạn cần học thêm một thủ thuật nữa, Key sẽ là trường bạn muốn chọn, còn giá trị thì sao? . db.vehicleinformation.find({make : "Toyota"}, {year : 1, _id : 0}).pretty()2 để bỏ chọn một trường Hãy xem nó như một ví dụ Chỉ chọn trường tên quốc giaỞ đây chúng tôi chỉ chọn thành công trường db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()6. Chờ đợi? theo mặc định, truy vấn mongo sẽ luôn bao gồm trường db.vehicleinformation.find({make : "Toyota"}, {year : 1, _id : 0}).pretty()4 Bỏ chọn bất kỳ trường nàoHãy bỏ chọn trường db.vehicleinformation.find({make : "Toyota"}, {year : 1, _id : 0}).pretty()4, nó cũng giống như vậy, Hy vọng bạn thấy loạt bài hướng dẫn này hữu ích. Tiếp theo chúng ta sẽ tìm hiểu sâu hơn về series này. Chia sẻ nó với các nhóm của bạn và học tập vui vẻ 🤗 Trong MongoDB, chúng ta sử dụng phương thức find() để lấy dữ liệu. Tuy nhiên, find() truy xuất tất cả các trường trong tài liệu mà không cần lọc Phép chiếu MongoDB giải quyết vấn đề này bằng cách cho phép hàm find() được sử dụng với các đối số lọc dữ liệu, cho phép người dùng chỉ trích xuất các trường dữ liệu cần thiết từ tài liệu Trong bài viết thực hành này, chúng tôi sẽ chỉ cho bạn
(Bài viết này là một phần của Hướng dẫn MongoDB của chúng tôi. Sử dụng menu bên phải để điều hướng. ) Cách hoạt động của phép chiếu MongoDBPhép chiếu MongoDB là một công cụ mạnh mẽ có thể được sử dụng để chỉ trích xuất các trường bạn cần từ tài liệu—không phải tất cả các trường. Nó cho phép bạn
Vì phép chiếu MongoDB được xây dựng dựa trên phương thức find() hiện có, nên bạn có thể sử dụng bất kỳ truy vấn phép chiếu nào mà không cần sửa đổi đáng kể các hàm hiện có. Ngoài ra, phép chiếu là yếu tố chính khi tìm dữ liệu dành riêng cho người dùng từ một tập dữ liệu nhất định Cú pháp cơ bản của phép chiếu MongoDBdb.collection_name.find({},{ Phép chiếu MongoDB sử dụng cú pháp tìm tương tự, nhưng chúng tôi cũng thêm một bộ tham số vào hàm tìm. Bộ tham số này thông báo cho phiên bản MongoDB về trường nào sẽ được trả về Xem xét bộ sưu tập sau đây có tên là “thông tin phương tiện” Chúng tôi sẽ cố gắng truy xuất năm kiểu dáng của chiếc xe do Toyota sản xuất (sản xuất. 'Toyota') Câu lệnh find() bình thường db.vehicleinformation.find({make : "Toyota"}).pretty() Kết quả Trong tuyên bố này, chúng tôi nhận được tất cả dữ liệu trong tài liệu nơi sản xuất là Toyota. Để chỉ lấy năm, chúng ta có thể sử dụng phép chiếu, như hình bên dưới Tuyên bố chiếu MongoDB db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty() Kết quả Trong câu lệnh chiếu, chúng tôi sử dụng trường năm có giá trị Boolean 1 (True) để cho biết rằng chúng tôi chỉ yêu cầu trường “năm”. Hạn chế là MongoDB sẽ trả về ID đối tượng (_id) của mỗi tài liệu trừ khi chúng tôi chỉ định rõ ràng rằng chúng tôi không yêu cầu ID đối tượng Câu lệnh chiếu MongoDB với “_id” bị loại trừ db.vehicleinformation.find({make : "Toyota"}, {year : 1, _id : 0}).pretty() Kết quả Trong câu lệnh này, chúng tôi chuyển 0 làm toán tử Boolean để cho biết rằng chúng tôi không yêu cầu trường ID đối tượng Toán tử trong MongoDB ProjectionSử dụng phương pháp chiếu MongoDB để truy xuất dữ liệu cụ thể từ tài liệu sẽ tác động tích cực đến hiệu suất cơ sở dữ liệu vì nó làm giảm khối lượng công việc của truy vấn tìm kiếm, giảm thiểu việc sử dụng tài nguyên Để giảm khối lượng công việc, MongoDB cung cấp các toán tử bên dưới có thể được sử dụng trong truy vấn phép chiếu
$ Toán tửToán tử $ được sử dụng để giới hạn nội dung của một mảng để chiếu phần tử đầu tiên khớp với điều kiện truy vấn trên trường mảng. Bắt đầu từ MongoDB 4. 4, nếu không có điều kiện truy vấn, phần tử đầu tiên sẽ được trả về trong mảng đã chỉ định cú pháp db.collection.find( { Hạn chế của toán tử $
Chúng tôi sẽ sử dụng Bộ sưu tập “studentgrades” để chứng minh toán tử $ db.studentgrades.find({},{_id:0}).pretty() Kết quả Sử dụng bộ sưu tập “điểm của học sinh”, chúng tôi tìm kiếm xem một học sinh đã nhận được điểm bằng hoặc lớn hơn 80 Hãy xem điều gì sẽ xảy ra khi chúng ta không sử dụng toán tử $. Đoạn mã dưới đây sẽ dẫn đến truy vấn trả về tất cả các giá trị trong mảng dưới dạng đầu ra nếu bất kỳ mục nào bằng hoặc lớn hơn 80 db.studentgrades.find( {grades: { $gte: 80}}, {"grades": 1}) Kết quả Sử dụng toán tử $ sẽ chỉ trả về mục đầu tiên có giá trị bằng hoặc lớn hơn 80 db.studentgrades.find( {grades: { $gte: 80}}, {"grades.$": 1}) Kết quả Toán tử $elemMatchToán tử $elemMatch sẽ giới hạn nội dung của một mảng đối với phần tử đầu tiên khớp với một điều kiện nhất định. Điều kiện này khác với toán tử $ vì toán tử chiếu $elemMatch yêu cầu một đối số điều kiện rõ ràng Hãy xem cú pháp sử dụng $elemMatch trong phương thức find() cú pháp Hạn chế của toán tử $elemMatch
Chúng tôi sẽ sử dụng bộ sưu tập “schooldata” sau đây để chứng minh toán tử $elemMatch db.schooldata.find() Kết quả Bây giờ chúng tôi sẽ chạy cái này trên một trường duy nhất. Với toán tử $elemMatch, chúng tôi sẽ tìm kiếm các trường học ở London có học sinh mười tuổi. Phương thức pretty() được sử dụng để định dạng đầu ra db.vehicleinformation.find({make : "Toyota"}).pretty()0 Kết quả Trong ví dụ dưới đây, chúng tôi sẽ kiểm tra nhiều trường. Ở đây, chúng tôi kiểm tra cả tuổi và tên của học sinh. Chúng tôi kiểm tra xem một học sinh tên là “barry” mười tuổi có đang học trường nào ở London không db.vehicleinformation.find({make : "Toyota"}).pretty()1 Kết quả Toán tử chiếu $sliceToán tử $slice chỉ định số phần tử sẽ được trả về làm đầu ra của truy vấn cú pháp db.vehicleinformation.find({make : "Toyota"}).pretty()2 Hạn chế trong toán tử $slice
Bây giờ chúng ta sẽ sử dụng bộ sưu tập “schooldata” để minh họa toán tử $slice db.schooldata.find() Kết quả Hãy cắt phần tử đầu tiên trong một mảng. Để đạt được kết quả này, chúng tôi sử dụng toán tử $slice để chỉ cắt phần tử đầu tiên từ mảng của sinh viên db.vehicleinformation.find({make : "Toyota"}).pretty()4 Kết quả Bây giờ, chúng ta sẽ cắt phần tử cuối cùng trong mảng. Sử dụng toán tử $slice với “-1” để chỉ ra bản ghi cuối cùng db.vehicleinformation.find({make : "Toyota"}).pretty()5 Kết quả Để bỏ qua các phần tử, chúng ta phải xác định các phần tử được bỏ qua và số phần tử được trả về. Các ví dụ sau minh họa kịch bản này Bỏ qua phần tử đầu tiên và trả về hai phần tử tiếp theo db.vehicleinformation.find({make : "Toyota"}).pretty()6 Kết quả Trong câu lệnh này, chúng ta cắt mảng “sinh viên” bằng cách bỏ qua phần tử đầu tiên và trả về hai phần tử còn lại. Chúng được xác định bên trong dấu ngoặc vuông []. Giá trị đầu tiên là phần tử bị bỏ qua, trong khi giá trị thứ hai là số lượng phần tử còn lại được trả về. Nếu mảng có ít hơn 2 phần tử sau khi bỏ qua phần tử đầu tiên sẽ trả về tất cả các phần tử còn lại Toán tử $metaToán tử $meta được sử dụng để lấy siêu dữ liệu được liên kết với tài liệu. Toán tử $meta có thể được sử dụng với cả phép chiếu MongoDB Aggregation và MongoDB. Phần này sẽ chỉ trình bày những kiến thức cơ bản về phép chiếu MongoDB và cách toán tử $meta sẽ được sử dụng trong phép chiếu Toán tử $meta sử dụng cú pháp sau db.vehicleinformation.find({make : "Toyota"}).pretty()7 Đối với “metaDataKeyword”, bạn có thể liên kết các giá trị này
Cách sử dụng và hạn chế của toán tử $meta trong phép chiếu
Bây giờ, hãy xem một vài ví dụ Đối với {$meta. “textScore”}, chúng tôi sẽ sử dụng bộ sưu tập thực phẩm db.vehicleinformation.find({make : "Toyota"}).pretty()8 Kết quả Hãy tạo một chỉ mục cho bộ sưu tập “thực phẩm”. Chúng tôi sẽ sử dụng trường “food_desc” để tạo chỉ mục văn bản db.vehicleinformation.find({make : "Toyota"}).pretty()9 Kết quả Bây giờ chúng ta hãy tìm điểm văn bản. Chúng tôi sử dụng từ “pizza” làm cụm từ tìm kiếm và sử dụng toán tử $meta để lấy điểm văn bản cho từng tài liệu. (_id. 0) được sử dụng để bỏ qua id đối tượng của từng tài liệu để có đầu ra đơn giản hơn db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()0 Kết quả Bây giờ vào {$meta. “khóa chỉ mục”}. Vì “indexKey” hoàn toàn chỉ dành cho mục đích gỡ lỗi, nên tài liệu chính thức của MongoDB nêu rõ như sau db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()1 Các ví dụ sau đây được tạo bằng cách sử dụng bộ sưu tập "vehiclesales". Sử dụng {_id. 0}, id đối tượng bị bỏ qua khỏi đầu ra db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()2 Kết quả Ở đây, chúng tôi tạo một chỉ mục phức hợp bằng cách sử dụng các trường “make” và “type” db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()3 Kết quả Tiếp theo, hãy thực hiện Phép chiếu với chỉ mục. Chúng tôi tìm kiếm các tài liệu trong bộ sưu tập "bán xe" có loại tương đương với "Thể thao" và sử dụng toán tử $meta để lấy khóa chỉ mục cho từng tài liệu db.vehicleinformation.find({make : "Toyota"}, {year : 1}).pretty()4 Kết quả Còn các phép chiếu không có chỉ mục thì sao? . Trong trường hợp này, chỉ mục sẽ không được trả về vì trường giá không phải là một phần của chỉ mục |