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

MongoDB: รวมค่าอาร์เรย์กับฟิลด์อื่นด้วย $concat และ $reduce

ใช้ $reduce รวมค่าในอาร์เรย์เป็น string แล้ว $concat รวมกับฟิลด์อื่น ใน aggregation pipeline สร้างคอลเลกชันตัวอย่าง:

> db.demo359.insertOne({
  Name1: "Chris",
  Name2: "David",
  Subjects: ["MySQL","MongoDB","Java"]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5694cdf8647eb59e5620d0") }

แสดงข้อมูล:

> db.demo359.find().pretty();

คิวรีรวม Subjects ด้วย space แล้วต่อกับ Name1:

> db.demo359.aggregate([
  { $project: {
    values: {
      $reduce: {
        input: '$Subjects',
        initialValue: '',
        in: { $concat: ['$$value', ' ', '$$this'] }
      }
    },
    Name1: 1
  }},
  { $project: {
    'ConcatResult': { '$concat': ['$Name1', '$values'] }
  }}
])

ผลลัพธ์:

{ "_id" : ObjectId("5e5694cdf8647eb59e5620d0"), "ConcatResult" : "Chris MySQL MongoDB Java" }

คำอธิบาย Pipeline

  1. $project แรก: $reduce วนลูป Subjects รวมเป็น string " MySQL MongoDB Java" (นำหน้าด้วย space)
  2. $project ที่สอง: $concat รวม Name1 + values

วิธีง่ายกว่า (MongoDB 4.4+)

ใช้ $reduce แบบเดี่ยว:

{ $project: { ConcatResult: { $reduce: { input: "$Subjects", initialValue: "$Name1", in: { $concat: ["$$value", " ", "$$this"] } } } } }

หรือใช้ $function (MongoDB 4.4+) เขียน JavaScript custom logic