ใช้ Aggregation $concat เติม Prefix ให้ทุก Document
เมื่อต้องการเติมข้อความหน้าฟิลด์ทุกเอกสาร (เช่นเพิ่ม "Mr." หน้าชื่อ) ใช้ $project + $concat ใน Aggregation Pipeline
ตัวอย่างข้อมูล
> db.prependDemo.insertOne({"StudentFirstName":"John"});
> db.prependDemo.insertOne({"StudentFirstName":"Chris"});
> db.prependDemo.insertOne({"StudentFirstName":"Robert"});
Pipeline: เติม "Mr." หน้า StudentFirstName
> db.prependDemo.aggregate([
{ $project: {
"StudentFirstName": { $concat: ["Mr.", "$StudentFirstName"] }
}}
]);
ผลลัพธ์
{ "_id" : ObjectId("5ccf3bcedceb9a92e6aa1955"), "StudentFirstName" : "Mr.John" }
{ "_id" : ObjectId("5ccf3bd3dceb9a92e6aa1956"), "StudentFirstName" : "Mr.Chris" }
{ "_id" : ObjectId("5ccf3bd8dceb9a92e6aa1957"), "StudentFirstName" : "Mr.Robert" }
ขยาย: เติมหลายฟิลด์ พร้อม Format
db.prependDemo.aggregate([
{ $project: {
fullName: { $concat: ["Mr. ", "$StudentFirstName", " ", "$StudentLastName"] },
idLabel: { $concat: ["ID: ", { $toString: "$_id" }] },
email: { $concat: ["$StudentFirstName", ".", "$StudentLastName", "@example.com"] }
}}
]);
Update จริงใน Database (MongoDB 4.2+)
db.prependDemo.updateMany(
{},
[{ $set: { StudentFirstName: { $concat: ["Mr. ", "$StudentFirstName"] } } }]
);
$concat Operands
- String Literal:
"Prefix" - Field Reference:
"$fieldName" - Expression:
{ $toString: "$numericField" },{ $dateToString: { date: "$dateField" } } - รองรับหลาย Argument:
{ $concat: [expr1, expr2, expr3, ...] }
หมายเหตุ
- Aggregation
$concatสร้าง Field ใหม่ใน Result - ไม่เปลี่ยนข้อมูลต้นทาง - ใช้
updateMany+ Pipeline (MongoDB 4.2+) เพื่อ Update จริง - หาก Field เป็น Null/Missing → $concat คืนค่า Null (ใช้
$ifNullกันได้)