Trong bài viết này, chúng ta sẽ xem xét các toán tử truy vấn được sử dụng phổ biến nhất. Chúng tôi sẽ giải thích những gì họ làm, sau đó chia sẻ các ví dụ để bạn có thể thấy cách họ làm việc
[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. ]
Toán tử MongoDB là gì?
MongoDB cung cấp các loại toán tử khác nhau có thể được sử dụng để tương tác với cơ sở dữ liệu. Toán tử là các ký hiệu hoặc từ khóa đặc biệt thông báo cho trình biên dịch hoặc trình thông dịch thực hiện các phép toán hoặc logic
Các toán tử truy vấn nâng cao chức năng của MongoDB bằng cách cho phép các nhà phát triển tạo các truy vấn phức tạp để tương tác với các tập dữ liệu phù hợp với ứng dụng của họ
MongoDB cung cấp các loại toán tử truy vấn sau
- so sánh
- Hợp lý
- Thành phần
- Sự đánh giá
- không gian địa lý
- Mảng
- Bitwise
- Bình luận
Các toán tử MongoDB có thể được sử dụng với bất kỳ lệnh MongoDB nào được hỗ trợ
Bây giờ, hãy xem xét các toán tử thường được sử dụng. [Chúng tôi sẽ không chạm vào tất cả, có rất nhiều. ] Chúng tôi sẽ sử dụng tập dữ liệu sau với hàm find[] để minh họa chức năng của từng toán tử
- cơ sở dữ liệu. siêu thị
- bộ sưu tập. nhân viên, hàng tồn kho, thanh toán, khuyến mãi
use supermarket db.employees.find[] db.inventory.find[] db.payments.find[] db.promo.find[]
tập dữ liệu
Toán tử so sánh
Các toán tử so sánh MongoDB có thể được sử dụng để so sánh các giá trị trong tài liệu. Bảng sau chứa các toán tử so sánh phổ biến
OperatorDescription$eq Khớp các giá trị bằng với giá trị đã cho. $gtMatches nếu giá trị lớn hơn giá trị đã cho. $ltMatches nếu giá trị nhỏ hơn giá trị đã cho. $gteMatch nếu giá trị lớn hơn hoặc bằng giá trị đã cho. $lteMatches nếu giá trị nhỏ hơn hoặc bằng giá trị đã cho. $inKhớp bất kỳ giá trị nào trong một mảng. $neMatch các giá trị không bằng với giá trị đã cho. $ninMatch không có giá trị nào được chỉ định trong một mảngToán tử $eq
Trong ví dụ này, chúng tôi truy xuất tài liệu có giá trị _id chính xác “LS0009100”
db.inventory.find[{"_id": { $eq: "LS0009100"}}].pretty[]
Kết quả
Toán tử $gt và $lt
Trong ví dụ này, chúng tôi truy xuất các tài liệu có `số lượng` lớn hơn 5000
db.inventory.find[{"quantity": { $gt: 5000}}].pretty[]
Kết quả
Cùng tìm những tài liệu có ‘số lượng’ nhỏ hơn 5000
db.inventory.find[{"quantity": { $lt: 5000}}].pretty[]
Kết quả
Toán tử $gte và $lte
Tìm tài liệu có ‘số lượng’ lớn hơn hoặc bằng 5000
db.inventory.find[{"quantity": { $gte: 12000}}].pretty[]
Kết quả
Truy vấn sau đây trả về các tài liệu có số lượng nhỏ hơn hoặc bằng 1000
db.inventory.find[{"quantity": { $lte: 1000}}].pretty[]
Kết quả
Toán tử $in và $nin
Truy vấn sau đây trả về các tài liệu trong đó trường giá chứa các giá trị đã cho
db.inventory.find[{"price": { $in: [3, 6]}}].pretty[]
Kết quả
Nếu bạn muốn tìm tài liệu mà trường giá không chứa các giá trị đã cho, hãy sử dụng truy vấn sau
db.inventory.find[{"price": { $nin: [5.23, 3, 6, 3.59, 4.95]}}].pretty[]
Kết quả
Toán tử $ne
Tìm tài liệu mà giá trị của trường giá không bằng 5. 23 trong bộ sưu tập hàng tồn kho
________số 8Kết quả
Toán tử logic
Các toán tử logic MongoDB có thể được sử dụng để lọc dữ liệu dựa trên các điều kiện nhất định. Các toán tử này cung cấp một cách để kết hợp nhiều điều kiện. Mỗi toán tử cân bằng điều kiện đã cho với giá trị đúng hoặc sai
Dưới đây là các toán tử logic MongoDB
OperatorDescription$andJoins hai hoặc nhiều truy vấn với logic AND và trả về các tài liệu phù hợp với tất cả các điều kiện. $orTham gia hai hoặc nhiều truy vấn với một OR logic và trả về các tài liệu khớp với một trong hai truy vấn. $norNgược lại với toán tử OR. Toán tử logic NOR sẽ kết hợp hai hoặc nhiều truy vấn và trả về các tài liệu không khớp với các điều kiện truy vấn đã cho. $notTrả về tài liệu không khớp với biểu thức truy vấn đã chotoán tử $and
Tìm tài liệu phù hợp với cả hai điều kiện sau
- job_role tương đương với “Cửa hàng cộng tác”
- emp_age nằm trong khoảng từ 20 đến 30
db.employees.find[{ $and: [{"job_role": "Store Associate"}, {"emp_age": {$gte: 20, $lte: 30}}]}].pretty[]
Kết quả
Toán tử $or và $nor
Tìm tài liệu phù hợp với một trong các điều kiện sau
- job_role tương đương với “Senior Cashier” hoặc “Store Manager”
db.inventory.find[{"_id": { $eq: "LS0009100"}}].pretty[]0
Kết quả
Tìm tài liệu không phù hợp với một trong các điều kiện sau
- job_role tương đương với “Senior Cashier” hoặc “Store Manager”
db.inventory.find[{"_id": { $eq: "LS0009100"}}].pretty[]1
Kết quả
toán tử $not
Tìm tài liệu mà chúng không phù hợp với điều kiện nhất định
- emp_age không lớn hơn hoặc bằng 40
db.inventory.find[{"_id": { $eq: "LS0009100"}}].pretty[]2
Kết quả
Toán tử phần tử
Các toán tử truy vấn phần tử được sử dụng để xác định tài liệu bằng cách sử dụng các trường của tài liệu. Bảng đưa ra dưới đây liệt kê các toán tử phần tử hiện tại
OperatorDescription$existsKhớp các tài liệu có trường được chỉ định. $type Khớp tài liệu theo loại trường đã chỉ định. Các loại trường này được chỉ định các loại BSON và có thể được xác định theo số loại hoặc bí danhToán tử $exists
Tìm tài liệu có trường job_role tồn tại và bằng “Cashier”
db.inventory.find[{"_id": { $eq: "LS0009100"}}].pretty[]3
Kết quả
Tìm tài liệu có trường địa chỉ. [Vì tập dữ liệu hiện tại không chứa trường địa chỉ, đầu ra sẽ là null. ]
db.inventory.find[{"_id": { $eq: "LS0009100"}}].pretty[]4
Kết quả
Toán tử $type
Truy vấn sau trả về tài liệu nếu trường emp_age là loại kép. Nếu chúng tôi chỉ định một loại dữ liệu khác, sẽ không có tài liệu nào được trả về mặc dù trường tồn tại vì nó không tương ứng với loại trường chính xác
db.inventory.find[{"_id": { $eq: "LS0009100"}}].pretty[]5
Kết quả
db.inventory.find[{"_id": { $eq: "LS0009100"}}].pretty[]6
Kết quả
Toán tử đánh giá
Toán tử đánh giá MongoDB có thể đánh giá cấu trúc dữ liệu tổng thể hoặc trường riêng lẻ trong tài liệu. Chúng tôi chỉ xem xét chức năng cơ bản của các toán tử này vì mỗi toán tử này có thể được coi là một chức năng nâng cao của MongoDB. Dưới đây là danh sách các toán tử đánh giá phổ biến trong MongoDB
OperatorDescription$jsonSchemaXác thực tài liệu theo lược đồ JSON đã cho. $modMatch các tài liệu trong đó giá trị của một trường đã cho bằng với phần còn lại sau khi được chia cho một giá trị đã chỉ định. $regexChọn tài liệu khớp với biểu thức chính quy đã cho. $textThực hiện tìm kiếm văn bản trên trường được chỉ định. Tìm kiếm chỉ có thể được thực hiện nếu trường được lập chỉ mục bằng chỉ mục văn bản. $whereMatches tài liệu đáp ứng một biểu thức JavaScriptToán tử $jsonSchema
Tìm tài liệu khớp với lược đồ JSON sau đây trong bộ sưu tập quảng cáo
Tập hợp $let được sử dụng để liên kết các biến với một đối tượng kết quả để có kết quả đơn giản hơn. Trong lược đồ JSON, chúng tôi đã chỉ định giá trị tối thiểu cho trường “dấu chấm” là 7, giá trị này sẽ lọc ra bất kỳ tài liệu nào có giá trị nhỏ hơn
db.inventory.find[{"_id": { $eq: "LS0009100"}}].pretty[]7____18
Kết quả
Toán tử $mod
Tìm tài liệu có số dư là 1000 khi chia cho 3000 trong bộ sưu tập hàng tồn kho
Lưu ý rằng tài liệu “Sữa không béo – 1 lít” được bao gồm trong đầu ra vì số lượng là 1000, không thể chia cho 3000 và phần còn lại là 1000
db.inventory.find[{"_id": { $eq: "LS0009100"}}].pretty[]9
Kết quả
Toán tử $regex
Tìm tài liệu có chứa từ "Đóng gói" trong trường tên trong bộ sưu tập hàng tồn kho
db.inventory.find[{"quantity": { $gt: 5000}}].pretty[]0
Kết quả
Toán tử $text
Tìm tài liệu bằng cách sử dụng văn bản tìm kiếm “Non-Fat” trong trường tên. Nếu trường chưa được lập chỉ mục, bạn phải tạo chỉ mục văn bản trước khi tìm kiếm
db.inventory.find[{"quantity": { $gt: 5000}}].pretty[]1
Kết quả
db.inventory.find[{"quantity": { $gt: 5000}}].pretty[]2
Kết quả
Toán tử $where
Tìm tài liệu từ bộ sưu tập "thanh toán" trong đó trường _id là một loại chuỗi và bằng hàm băm md5 đã cho được xác định dưới dạng hàm JavaScript
db.inventory.find[{"quantity": { $gt: 5000}}].pretty[]3
Kết quả
Toán tử mảng
Toán tử mảng MongoDB được thiết kế để truy vấn tài liệu bằng mảng. Dưới đây là các toán tử mảng được cung cấp bởi MongoDB
OperatorDescrip$allMatch các mảng chứa tất cả các giá trị đã chỉ định trong điều kiện truy vấn. $sizeKhớp tài liệu nếu kích thước mảng bằng với kích thước đã chỉ định trong truy vấn. $elemMatchMatch Khớp các tài liệu khớp với các điều kiện $elemMatch đã chỉ định trong mỗi phần tử mảngtoán tử $all
Tìm tài liệu trong đó trường mảng danh mục chứa các giá trị “lành mạnh” và “không phải trả tiền”
db.inventory.find[{"quantity": { $gt: 5000}}].pretty[]4
Kết quả
Toán tử $size
Tìm tài liệu trong đó trường mảng danh mục có hai phần tử
db.inventory.find[{"quantity": { $gt: 5000}}].pretty[]5
Kết quả
Toán tử $elemMatch
Tìm tài liệu có ít nhất một phần tử trong mảng “daily_sales” nhỏ hơn 200 và lớn hơn 100
db.inventory.find[{"quantity": { $gt: 5000}}].pretty[]6
Kết quả
Toán tử nhận xét
Toán tử truy vấn nhận xét MongoDB liên kết một nhận xét với bất kỳ biểu thức nào nhận một vị từ truy vấn. Việc thêm nhận xét vào truy vấn cho phép quản trị viên cơ sở dữ liệu theo dõi và giải thích nhật ký MongoDB bằng cách sử dụng nhận xét một cách dễ dàng
Toán tử $comment
Tìm tài liệu có khoảng thời gian bằng 7 trong bộ sưu tập quảng cáo trong khi thêm nhận xét vào thao tác tìm
db.inventory.find[{"quantity": { $gt: 5000}}].pretty[]7
Kết quả
Thêm nhận xét cho phép người dùng dễ dàng xác định các lệnh trong nhật ký MongoDB. Hoạt động trên sẽ được ghi lại như sau
db.inventory.find[{"quantity": { $gt: 5000}}].pretty[]8
Kết quả
Phần kết luận
Trong bài viết này, chúng ta mới chỉ tìm hiểu sơ qua về các toán tử MongoDB. Chúng ta có thể mở rộng hơn nữa chức năng tổng thể của cơ sở dữ liệu bằng phép chiếu và tập hợp