Sử dụng aggregation: $project tính tổng, $match lọc theo tổng.
Tạo collection
> db.searchDocumentsDemo.insertOne({ "Value1": 100, "Value2": 560 });
{ "acknowledged": true, "insertedId": ObjectId("5cd3fe1eedc6604c74817ce9") }
> db.searchDocumentsDemo.insertOne({ "Value1": 300, "Value2": 150 });
{ "acknowledged": true, "insertedId": ObjectId("5cd3fe29edc6604c74817cea") }
> db.searchDocumentsDemo.insertOne({ "Value1": 400, "Value2": 200 });
{ "acknowledged": true, "insertedId": ObjectId("5cd3fe30edc6604c74817ceb") }
> db.searchDocumentsDemo.insertOne({ "Value1": 190, "Value2": 210 });
{ "acknowledged": true, "insertedId": ObjectId("5cd3fe45edc6604c74817cec") }
Hiển thị tất cả
> db.searchDocumentsDemo.find().pretty();
Tìm tài liệu có Value1 + Value2 < 500
> db.searchDocumentsDemo.aggregate([
{ $project: { totalValue: { $add: ["$Value1", "$Value2"] } } },
{ $match: { totalValue: { $lt: 500 } } }
]);
Kết quả (hai tài liệu có tổng 450 và 400):
{
"_id": ObjectId("5cd3fe29edc6604c74817cea"), "totalValue": 450
}
{
"_id": ObjectId("5cd3fe45edc6604c74817cec"), "totalValue": 400
}
Giải thích: $add tính tổng hai trường. $project tạo trường mới totalValue. $match lọc trên trường tính toán được. Có thể thêm _id: 1 trong project để giữ _id gốc.