ใช้ 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" }
เปรียบเทียบ
| วิธี | เหมาะสำหรับ | ประสิทธิภาพ | บันทึกลง DB |
|---|---|---|---|
forEach() ใน Shell | Ad-hoc, One-time, Debug | ช้า (Client-side loop) | ต้อง Update เอง |
Aggregation $concat | Production, Query, View | เร็ว (Server-side) | ใช้กับ $out/$merge |
$set + $concat ใน Update | Update จริงใน DB | Atomic | ✅ บันทึกได้ |