Chương này giới thiệu cú pháp truy vấn cơ bản của MongoDB thông qua mongo shell. Trong mongo shell, phương thức db.collection.find()
được sử dụng để truy vấn dữ liệu.
Chuẩn bị dữ liệu kiểm thử
Chèn một số dữ liệu vào bộ sưu tập inventory.
db.inventory.insertMany([
{ item: "sổ tay", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "quyển vở", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
{ item: "giấy", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "lịch", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "bưu ảnh", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);
Truy vấn tất cả tài liệu
Truy vấn tất cả tài liệu trong bộ sưu tập inventory, {} đại diện cho điều kiện truy vấn trống.
db.inventory.find( {} )
Tương tự như câu lệnh SQL sau:
SELECT * FROM inventory
Điều kiện truy vấn bằng nhau
Cú pháp:
{ trường: giá trị, ... }
Ví dụ 1:
db.inventory.find( { status: "D" } )
Tương tự như câu lệnh SQL sau:
SELECT * FROM inventory WHERE status = "D"
Ví dụ 2: Truy vấn trường lồng nhau, sử dụng dấu chấm (.) để kết nối các trường của tài liệu lồng nhau.
db.inventory.find( { "size.uom": "in" } )
Tương tự như câu lệnh SQL sau:
SELECT * FROM inventory WHERE size.uom = "in"
Lưu ý: Tài liệu MongoDB được lưu trữ dưới dạng JSON, do đó họ hỗ trợ việc sử dụng trường lồng nhau như là điều kiện truy vấn.
Sử dụng các toán tử truy vấn
MongoDB hỗ trợ nhiều toán tử truy vấn để thực hiện các truy vấn phức tạp khác nhau. Cú pháp:
{ <trường1>: { <toán tử1>: <giá trị1> }, ... }
Giải thích:
- trường1: tên trường
- toán tử1: toán tử
- giá trị1: tham số của toán tử
Ví dụ của toán tử $in:
db.inventory.find( { status: { $in: [ "A", "D" ] } } )
Tương tự như câu truy vấn SQL sau với toán tử "in":
SELECT * FROM inventory WHERE status in ("A", "D")
Lưu ý: Để biết thông tin chi tiết về các toán tử, vui lòng tham khảo phần chi tiết truy vấn MongoDB sau này.
điều kiện and
Tương tự như SQL, MongoDB cũng hỗ trợ điều kiện and.
Ví dụ:
// Nhập nhiều điều kiện liên tiếp nhau, và kết nối các điều kiện bằng and
db.inventory.find( { status: "A", item: "bưu ảnh"} )
Tương tự như câu lệnh SQL sau:
SELECT * FROM inventory WHERE status = "A" AND item = "bưu ảnh"
điều kiện or
Tương tự như SQL, MongoDB cũng hỗ trợ điều kiện or, được thực hiện thông qua toán tử $or.
Cú pháp:
{
$or: [
{điều kiện1},
{điều kiện2},
.....
]
}
Ví dụ:
db.inventory.find( { $or: [ { status: "A" }, { item: "bưu ảnh"} ] } )
Tương tự như câu lệnh SQL sau:
SELECT * FROM inventory WHERE status = "A" OR item = "bưu ảnh"
Kết hợp điều kiện and và or
Tương tự như SQL, MongoDB có thể kết hợp các điều kiện truy vấn phức tạp bằng cách sử dụng and và or.
Ví dụ:
db.inventory.find( {
status: "A",
$or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} )
Ở đây, toán tử $lt để so sánh nhỏ hơn và so khớp biểu thức chính quy được sử dụng.
Điều này tương tự như câu lệnh SQL sau:
SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 or item like 'p%')
Lưu ý: Để biết giải thích chi tiết về các điều kiện truy vấn MongoDB, vui lòng tham khảo các chương tiếp theo.