Sử dụng stage $addFields trong Aggregation Pipeline để thêm trường mới mà giữ nguyên tất cả trường hiện có.
Ví dụ minh họa
Tạo collection addFieldDemo:
> db.addFieldDemo.insertOne({
"MaNhanVien": 101, "TenNhanVien": "Larry",
"ChiTietNhanVien": {"Luong": 65000, "ThanhPho": "New York", "ThongDiep": "Hi"}
});
Thêm trường LuongCoBan = Luong từ object lồng nhau
> db.addFieldDemo.aggregate([
{$addFields: {"LuongCoBan": "$ChiTietNhanVien.Luong"}}
]).pretty();
Kết quả:
{
"_id": ObjectId("..."),
"MaNhanVien": 101,
"TenNhanVien": "Larry",
"ChiTietNhanVien": {"Luong": 65000, "ThanhPho": "New York", "ThongDiep": "Hi"},
"LuongCoBan": 65000
}
Đặc điểm: $addFields tương đương $project nhưng tự động giữ tất cả trường hiện có. Chỉ định trường mới và biểu thức tính toán.
Lưu ý: Aggregation chỉ đọc, không sửa document gốc. Dùng $merge hoặc $out để lưu kết quả, hoặc updateMany() với pipeline (MongoDB 4.2+) để cập nhật thực tế.