Để thêm một trường với giá trị cố định (static) vào kết quả truy vấn MongoDB mà không lưu vào database, sử dụng toán tử $literal trong Aggregation Framework kết hợp với stage $project.
Tạo dữ liệu mẫu
> db.fieldWithStaticValue.insertOne({"Name":"Larry","Age":24});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6554c7924bb85b3f48948") }
> db.fieldWithStaticValue.insertOne({"Name":"Chris","Age":23});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd655567924bb85b3f48949") }
> db.fieldWithStaticValue.insertOne({"Name":"David","Age":26});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd655607924bb85b3f4894a") }
Xem dữ liệu
> db.fieldWithStaticValue.find();
Thêm trường tĩnh với $literal
> db.fieldWithStaticValue.aggregate( [ { $project: { Name: 1, Age: 1, "StaticValue": { $literal: 100 } } } ]);Kết quả
Giải thích
$project: Chỉ định các trường đầu ra$literal: 100: Giá trị hằng số 100 cho mọi tài liệu- Trường
StaticValuechỉ tồn tại trong kết quả truy vấn, không được lưu vào database
Các kiểu giá trị tĩnh khác
// Chuỗi
"Status": { $literal: "ACTIVE" }
// Đối tượng
"Metadata": { $literal: { "source": "api", "version": "1.0" } }
// Mảng
"Tags": { $literal: ["mongodb", "aggregation", "tutorial"] }
// Null
"OptionalField": { $literal: null }
// Biểu thức (được đánh giá một lần)
"Timestamp": { $literal: new Date() }
Ứng dụng thực tế
- Thêm metadata cho API response (version, timestamp, source)
- Gán giá trị mặc định cho báo cáo
- Tạo trường computed field cho downstream processing
- Debugging: thêm trường trace ID
Lưu ý
Khác với $addFields (thêm vào tài liệu hiện có), $project cho phép kiểm soát chính xác các trường đầu ra. Nếu muốn giữ tất cả trường gốc + thêm trường tĩnh, dùng $addFields:
db.fieldWithStaticValue.aggregate([
{$addFields: {"StaticValue": {$literal: 100}}}
]);