Trường đường dẫn mongodb

Địa chỉ email ẩn danh cho nhóm này hoặc bạn cần có quyền xem địa chỉ email thành viên để xem thư gốc

để mongod. @nhóm Google. com

Theo như tôi biết, đây là cách duy nhất bạn có thể làm điều đó. Nhưng vì _id không bắt buộc phải là ObjectId. Bạn có thể lưu chuỗi hoặc bất cứ thứ gì có thể là duy nhất

{ _Tôi. 'John', giá trị. 'vlu' }

db. kiểm tra. cập nhật ({'_id'. 'John'}, {'$set'. {'bleh'. 'bleyy'}})

Hoặc nếu bạn quan tâm đến ObjectId, bạn có thể đặt một trường khác có chỉ mục duy nhất sẽ đóng vai trò là id "con người". Cái nào có thể thân thiện hơn để làm việc với

db. kiểm tra. cập nhật ({'tên người dùng'. 'John'}, {'$set'. {'bleh'. 'bleyy'}})

Trong đó tên người dùng là một id duy nhất. Theo tôi, làm việc với _id không phải lúc nào cũng tốt vì nó có thể ẩn ý nghĩa của id nếu bạn có thể đặt một

Giai đoạn

db.vehicleinformation.find({make : "Toyota"}).pretty()
6 trong quy trình MongoDB thêm một trường mới vào bản ghi. Ngoài trường mới, giai đoạn này cũng sử dụng biểu thức tổng hợp thực hiện một số loại logic như số học hoặc so sánh

Kiểm tra ví dụ dưới đây trong đó giai đoạn ____26 được sử dụng làm giai đoạn thứ ba để tạo một trường mới có tên là

db.vehicleinformation.find({make : "Toyota"}).pretty()
8

$match: {grade_level: 6, average_test_score: {$gt: 97}}

highest_score: { $max: "$test_scores" }

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 MongoDB

Phé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

  • Dự án dữ liệu ngắn gọn và minh bạch
  • Lọc tập dữ liệu mà không ảnh hưởng đến hiệu suất cơ sở dữ liệu tổng thể

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 MongoDB

db.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”

Trường đường dẫn mongodb

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ả

Trường đường dẫn mongodb

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ả

Trường đường dẫn mongodb

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ả

Trường đường dẫn mongodb

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 Projection

Sử 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

  • $
  • $elemMatch
  • $lát
  • $meta

$ 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( { :  .. }, { ".$": 1 } )

Hạn chế của toán tử $

  • Chỉ có thể sử dụng một toán tử $ duy nhất trong một truy vấn
  • Truy vấn chỉ được bao gồm một điều kiện duy nhất trên trường mảng mà nó sẽ được áp dụng
  • Hàm sort() trong phương thức find() sẽ được áp dụng trước toán tử $. Chức năng này có thể khiến thứ tự sắp xếp không được thể hiện chính xác
  • Toán tử $ chỉ có thể được áp dụng ở cuối đường dẫn trường. Hạn chế này đã được giới thiệu trong MongoDB 4. 4 để giảm thiểu mọi vấn đề về định dạng
  • Không thể sử dụng biểu thức phép chiếu $slice với toán tử $ như một phần của cùng một biểu thức

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ả

Trường đường dẫn mongodb

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ả

Trường đường dẫn mongodb

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

________số 8

Kết quả

Trường đường dẫn mongodb

Toán tử $elemMatch

Toá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

db.collection.find( { :  .. }, { ".$elemMatch": ($elemMatch operator) } )

Hạn chế của toán tử $elemMatch

  • Bất kể thứ tự của các trường trong tài liệu, trường mà phép chiếu $elemMatch được áp dụng sẽ được trả về là trường cuối cùng của tài liệu
  • các thao tác find() được thực hiện trên các khung nhìn MongoDB không hỗ trợ toán tử phép chiếu $elemMatch
  • biểu thức truy vấn $text không được hỗ trợ với 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.collection_name.find({},{ : })
0

Kết quả

Trường đường dẫn mongodb

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ả

Trường đường dẫn mongodb

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ả

Trường đường dẫn mongodb

Toán tử chiếu $slice

Toá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

  • Với sự ra đời của MongoDB 4. 4, toán tử $slice sẽ chỉ trả về phần tử được cắt lát. Nó sẽ không trả về bất kỳ mục nào khác trong một mảng lồng nhau
  • Toán tử $slice không hỗ trợ thao tác find() được thực hiện trên các khung nhìn MongoDB
  • Toán tử $slice không thể được sử dụng cùng với toán tử chiếu $ do hạn chế của MongoDB, trong đó các trường cấp cao nhất không thể bao gồm $ (ký hiệu đô la) như một phần của tên trường
  • Các truy vấn không được chứa $slice của một mảng và một trường được nhúng trong mảng như một phần của cùng một câu lệnh để loại bỏ xung đột đường dẫn khỏi MongoDB 4. 4

Bây giờ chúng ta sẽ sử dụng bộ sưu tập “schooldata” để minh họa toán tử $slice

db.collection_name.find({},{ : })
0

Kết quả

Trường đường dẫn mongodb

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ả

Trường đường dẫn mongodb

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ả

Trường đường dẫn mongodb

Để 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ả

Trường đường dẫn mongodb

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ử $meta

Toá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

  • Từ khóa "textScore". “textScore” sẽ trả về điểm số được liên kết với chuỗi $text đã cho. Về cơ bản, từ khóa này tìm cách khớp chính xác cụm từ tìm kiếm với trường đã cho trong tài liệu. Truy vấn $text là bắt buộc khi sử dụng từ khóa “textScore” từ MongoDB 4. 4
  • Từ khóa “indexKey”. Được giới thiệu trong MongoDB 4. 4 như một sự thay thế ưa thích cho con trỏ. hàm returnKey(). Hàm này trả về khóa chỉ mục cho tài liệu sử dụng chỉ mục không phải văn bản. Từ khóa này chỉ dành cho mục đích gỡ lỗi, không được sử dụng trong môi trường sản xuất

Cách sử dụng và hạn chế của toán tử $meta trong phép chiếu

  • {$meta. Biểu thức “$textScore”} có thể là một phần của truy vấn phép chiếu trong tài liệu để lấy điểm văn bản. Biểu thức có thể là bao gồm hoặc loại trừ trong câu lệnh chiếu. Hạn chế duy nhất là nếu biểu thức được đặt thành một trường hiện có trong tài liệu, giá trị siêu dữ liệu được chiếu sẽ ghi đè lên giá trị hiện tại trong trường
  • Bạn không thể xác định “điểm văn bản” trong phương thức find(). Do đó, lựa chọn tốt nhất là sử dụng tập hợp MongoDB
  • Biểu thức $meta có thể được sử dụng trong hàm sort(). Siêu dữ liệu “textScore” sẽ được sắp xếp theo thứ tự giảm dần
  • Khi {$meta. Biểu thức “$textScore”} được bao gồm trong cả hàm chiếu và hàm sắp xếp, mỗi hàm có thể có các tên trường khác nhau cho biểu thức. Hệ thống truy vấn sẽ bỏ qua tên trường trong sort()

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ả

Trường đường dẫn mongodb

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ả

Trường đường dẫn mongodb

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ả

Trường đường dẫn mongodb

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ả

Trường đường dẫn mongodb

Ở đâ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ả

Trường đường dẫn mongodb

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ả

Trường đường dẫn mongodb

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

$root trong MongoDB là gì?

Tài nguyên gốc là điểm bắt đầu cho API Trình quản lý đám mây . Từ đây, bạn có thể duyệt qua các liên kết để truy cập tất cả các tài nguyên API khác.

Làm cách nào để lấy giá trị trường trong MongoDB?

Trả về giá trị của trường được chỉ định từ tài liệu. Nếu bạn không chỉ định một đối tượng, $getField trả về giá trị của trường từ $$CURRENT. Bạn có thể sử dụng $getField để truy xuất giá trị của các trường có tên chứa dấu chấm (. ) hoặc bắt đầu bằng ký hiệu đô la ($ ).

Làm cách nào để thêm một trường trong MongoDB?

Để thêm trường hoặc các trường vào tài liệu được nhúng (bao gồm cả tài liệu trong mảng) hãy sử dụng ký hiệu dấu chấm . Xem ví dụ. Để thêm phần tử vào trường mảng hiện có với $addFields , hãy sử dụng với $concatArrays.

Làm cách nào để sử dụng $set trong MongoDB?

Toán tử $set thay thế giá trị của một trường bằng giá trị đã chỉ định . Biểu thức toán tử $set có dạng như sau. { $set. {