Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

Prepend String (เติมข้อความหน้า) ทุกแถวในคอลัมน์ MongoDB

ใช้ 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 กันได้)