Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Thêm trường với giá trị tĩnh vào kết quả truy vấn MongoDB

Để 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 StaticValue chỉ 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}}}
]);