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

การรวมอาร์เรย์ของเอกสารใน MongoDB ด้วย $push ใน Aggregation

รวม (Merge) อาร์เรย์จากหลายเอกสารเป็นอาร์เรย์เดียวด้วย $push

บทความนี้สาธิตการใช้ $group ร่วมกับ $push ใน Aggregation Pipeline เพื่อรวมค่าของฟิลด์อาร์เรย์จากหลายเอกสารเข้าด้วยกันเป็นอาร์เรย์ของอาร์เรย์

ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง

> db.demo64.insertOne({"Subjects":["MySQL","MongoDB","Java"]});
{ "acknowledged": true, "insertedId": ObjectId("5e28762bcfb11e5c34d89936") }
> db.demo64.insertOne({"Subjects":["Oracle","Spring","Python"]});
{ "acknowledged": true, "insertedId": ObjectId("5e28763fcfb11e5c34d89937") }

ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด

> db.demo64.find();

ผลลัพธ์:

{ "_id": ObjectId("5e28762bcfb11e5c34d89936"), "Subjects": ["MySQL", "MongoDB", "Java"] }
{ "_id": ObjectId("5e28763fcfb11e5c34d89937"), "Subjects": ["Oracle", "Spring", "Python"] }

ขั้นตอนที่ 3: Aggregation Pipeline รวมอาร์เรย์

  1. $group - จัดกลุ่มทั้งหมด (_id: null) ใช้ $push สะสมค่า Subjects ทั้งอาร์เรย์เข้าไปในอาร์เรย์ใหม่
  2. $project - ซ่อน _id
> db.demo64.aggregate([
    { "$group": { "_id": null, "Subjects": { "$push": "$Subjects" } }},
    { "$project": { "_id": 0 }}
]);

ผลลัพธ์ที่ได้

{ "Subjects": [ ["MySQL", "MongoDB", "Java"], ["Oracle", "Spring", "Python"] ] }

สรุป: $push ใน $group จะสร้างอาร์เรย์ที่แต่ละ Element เป็นค่าของฟิลด์จากแต่ละเอกสาร หากฟิลด์นั้นเป็นอาร์เรย์ จะได้ Array of Arrays หากต้องการ Flatten ให้ใช้ $unwind ก่อน หรือ $reduce / $concatArrays ใน MongoDB เวอร์ชันใหม่