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

ต่อข้อความ (Concatenate) ผลลัพธ์ใน MongoDB

ใช้ forEach() รวมฟิลด์ใน MongoDB Shell

MongoDB Shell สามารถใช้ JavaScript forEach() บน Cursor เพื่อประมวลผลแต่ละเอกสารและสร้างฟิลด์ใหม่จากการรวมสตริง

ตัวอย่างข้อมูล

> db.concatenateDemo.insertOne({"Name":"John","Age":21});
> db.concatenateDemo.insertOne({"Name":"Carol","Age":23});

คำสั่ง Concatenate Name และ Age

> db.concatenateDemo.find().forEach(function(result) {
    result.NameAndAge = result.Name + ' ' + result.Age;
    printjson(result);
});

ผลลัพธ์

{ "_id" : ObjectId("5cc80dd88f9e6ff3eb0ce448"), "Name" : "John", "Age" : 21, "NameAndAge" : "John 21" }
{ "_id" : ObjectId("5cc80de18f9e6ff3eb0ce449"), "Name" : "Carol", "Age" : 23, "NameAndAge" : "Carol 23" }

วิธีทันสมัย: ใช้ Aggregation $concat (MongoDB 4.0+)

db.concatenateDemo.aggregate([
    { $project: {
        Name: 1,
        Age: 1,
        NameAndAge: { $concat: ["$Name", " ", { $toString: "$Age" }] }
    }}
]);

ผลลัพธ์ Aggregation

{ "_id" : ObjectId("..."), "Name" : "John", "Age" : 21, "NameAndAge" : "John 21" }
{ "_id" : ObjectId("..."), "Name" : "Carol", "Age" : 23, "NameAndAge" : "Carol 23" }

เปรียบเทียบ

ตัวอย่าง Update จริง (MongoDB 4.2+)

db.concatenateDemo.updateMany(
    {},
    [{ $set: { NameAndAge: { $concat: ["$Name", " ", { $toString: "$Age" }] } } }]
);
วิธีเหมาะสำหรับประสิทธิภาพบันทึกลง DB
forEach() ใน ShellAd-hoc, One-time, Debugช้า (Client-side loop)ต้อง Update เอง
Aggregation $concatProduction, Query, Viewเร็ว (Server-side)ใช้กับ $out/$merge
$set + $concat ใน UpdateUpdate จริงใน DBAtomic✅ บันทึกได้