5. Query & Aggregation
Queries
- Model.deleteMany()
- Model.deleteOne()
- Model.find()
- Model.findById()
- Model.findByIdAndDelete()
- Model.findByIdAndRemove()
- Model.findByIdAndUpdate()
- Model.findOne()
- Model.findOneAndDelete()
- Model.findOneAndRemove()
- Model.findOneAndReplace()
- Model.findOneAndUpdate()
- Model.replaceOne()
- Model.updateMany()
- Model.updateOne()
Query Selectors
https://www.mongodb.com/docs/manual/reference/operator/query/
Comparison
Name | Description |
---|---|
$eq | Matches values that are equal to a specified value. |
$gt | Matches values that are greater than a specified value. |
$gte | Matches values that are greater than or equal to a specified value. |
$in | Matches any of the values specified in an array. |
$lt | Matches values that are less than a specified value. |
$lte | Matches values that are less than or equal to a specified value. |
$ne | Matches all values that are not equal to a specified value. |
$nin | Matches none of the values specified in an array. |
Logical
Name | Description |
---|---|
$and | Joins query clauses with a logical AND returns all documents that match the conditions of both clauses. |
$not | Inverts the effect of a query expression and returns documents that do not match the query expression. |
$nor | Joins query clauses with a logical NOR returns all documents that fail to match both clauses. |
$or | Joins query clauses with a logical OR returns all documents that match the conditions of either clause. |
Array
Name | Description |
---|---|
$all | Matches arrays that contain all elements specified in the query. |
$elemMatch | Selects documents if element in the array field matches all the specified $elemMatch conditions. |
$size | Selects documents if the array field is a specified size. |
Sorting
Sorting is how you can ensure you query results come back in the desired order.
tip
Specify in the sort parameter the field or fields to sort by and a value of 1 or -1 to specify an ascending or descending sort respectively.
const personSchema = new mongoose.Schema({
age: Number,
});
const Person = mongoose.model('Person', personSchema);
for (let i = 0; i < 10; i++) {
await Person.create({ age: i });
}
await Person.find().sort({ age: -1 }); // returns age starting from 10 as the first entry
await Person.find().sort({ age: 1 }); // returns age starting from 0 as the first entry
// find all documents
await MyModel.find({});
// find all documents named john and at least 18
await MyModel.find({ name: 'john', age: { $gte: 18 } }).exec();
// executes, name LIKE john and only selecting the "name" and "friends" fields
await MyModel.find({ name: /john/i }, 'name friends').exec();
// passing options
await MyModel.find({ name: /john/i }, null, { skip: 10 }).exec();
Find
// find all documents
await MyModel.find({});
// find all documents named john and at least 18
await MyModel.find({ name: 'john', age: { $gte: 18 } }).exec();
// executes, name LIKE john and only selecting the "name" and "friends" fields
await MyModel.find({ name: /john/i }, 'name friends').exec();
// passing options
await MyModel.find({ name: /john/i }, null, { skip: 10 }).exec();
Bài tập
C.R.U.D
Create, Update, Delete, Get, GetById => POST, PATCH, DELETE, GET, GET(id)
- Categories
- Suppliers
- Customers
- Employees
- Products
- Orders -> OrderDetails
QUERY & AGGREGATION
- Hiển thị tất cả các mặt hàng có giảm giá
<=
10% - Hiển thị tất cả các mặt hàng có giảm giá
<=
10%, và chi tiết danh mục, nhà cung cấp - Hiển thị tất cả các mặt hàng có tồn kho
<=
5 - Hiển thị tất cả các mặt hàng có tồn kho
<=
5, và chi tiết danh mục, nhà cung cấp - Hiển thị tất cả các mặt hàng có Giá bán sau khi đã tính giảm giá
<=
1000 - Hiển thị tất cả các khách hàng có địa chỉ ở Quận Hải Châu
- Hiển thị tất cả các khách hàng có năm sinh 1990
- Hiển thị tất cả các khách hàng có sinh nhật là hôm nay
- Hiển thị tất cả các đơn hàng có trạng thái là COMPLETED
- Hiển thị tất cả các đơn hàng có trạng thái là COMPLETED trong ngày hôm nay
- Hiển thị tất cả các đơn hàng có trạng thái là
status
có ngày tạo trong khoảngfromDate
vàtoDate
- Hiển thị tất cả các đơn hàng có trạng thái là CANCELED
- Hiển thị tất cả các đơn hàng có trạng thái là CANCELED trong ngày hôm nay
- Hiển thị tất cả các đơn hàng có hình thức thanh toán là CASH
- Hiển thị tất cả các đơn hàng có hình thức thanh toán là CREADIT CARD
- Hiển thị tất cả các đơn hàng có địa chỉ giao hàng là Hà Nội
- Hiển thị tất cả các nhân viên có sinh nhật là hôm nay
- Hiển thị tất cả các nhà cung cấp có tên là: (SONY, SAMSUNG, TOSHIBA, APPLE)
- Hiển thị tất cả các đơn hàng cùng với thông tin chi tiết khách hàng (Customer)
- Hiển thị tất cả các mặt hàng cùng với thông tin chi tiết của Category và Supplier
- Hiển thị tất cả danh mục (Categories) với số lượng hàng hóa trong mỗi danh mục
- Hiển thị tất cả nhà cung cấp (Suppliers) với số lượng hàng hóa mỗi nhà cung cấp
- Hiển thị tất cả các mặt hàng được bán trong khoảng từ ngày, đến ngày
- Hiển thị tất cả các khách hàng mua hàng trong khoảng từ ngày, đến ngày
- Hiển thị tất cả các khách hàng mua hàng (với tổng số tiền) trong khoảng từ ngày, đến ngày
- Hiển thị tất cả đơn hàng với tổng số tiền
- Hiển thị tất cả các nhân viên bán hàng với tổng số tiền bán được
- Hiển thị tất cả các mặt hàng không bán được
- Hiển thị tất cả các nhà cung cấp không bán được trong khoảng từ ngày, đến ngày
- Hiển thị top 3 các nhân viên bán hàng với tổng số tiền bán được từ cao đến thấp trong khoảng từ ngày, đến ngày
- Hiển thị top 5 các khách hàng mua hàng với tổng số tiền mua được từ cao đến thấp trong khoảng từ ngày, đến ngày
- Hiển thị danh sách các mức giảm giá của cửa hàng
- Hiển thị tất cả danh mục (Categories) với tổng s ố tiền bán được trong mỗi danh mục
- Hiển thị tất cả đơn hàng với tổng số tiền mà đã được giao hàng thành công trong khoảng từ ngày, đến ngày
- Hiển thị tất cả đơn hàng có tổng số tiền bán hàng sắp xếp từ cao đến thấp trong khoảng từ ngày, đến ngày
- Hiển thị tất cả đơn hàng có tổng số tiền bán hàng ít nhất trong khoảng từ ngày, đến ngày
- Hiển thị trung bình cộng giá trị các đơn hàng trong khoảng từ ngày, đến ngày