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

เลือก 2 ฟิลด์ และคืนค่าอาร์เรย์ค่าที่ไม่ซ้ำและเรียงลำดับใน MongoDB

ใช้ Aggregation + $setUnion รวมค่าจาก 2 ฟิลด์ แล้ว Distinct และ Sort

เมื่อต้องการรวมค่าจาก 2 ฟิลด์ต่างกัน ให้ค่าที่ไม่ซ้ำ (Distinct) และเรียงลำดับ (Sorted) ใช้ Pipeline: $group + $push + $setUnion

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

> db.sortedArrayWithDistinctDemo.insertOne({ value1: 4, value2: 5 });
> db.sortedArrayWithDistinctDemo.insertOne({ value1: 5, value2: 6 });
> db.sortedArrayWithDistinctDemo.insertOne({ value1: 7, value2: 4 });

Pipeline

> db.sortedArrayWithDistinctDemo.aggregate([
    {
        "$group": {
            "_id": null,
            "value1": { "$push": "$value1" },
            "value2": { "$push": "$value2" }
        }
    },
    {
        "$project": {
            "_id": 0,
            "bothValues": { "$setUnion": [ "$value1", "$value2" ] }
        }
    }
]);

ผลลัพธ์

{ "bothValues" : [ 4, 5, 6, 7 ] }

คำอธิบาย

  1. $group รวมค่า value1 ทั้งหมดไว้ในอาร์เรย์ เดียวกันกับ value2
  2. $setUnion รวม 2 อาร์เรย์ ให้ค่าที่ไม่ซ้ำ (Union) และ เรียงลำดับอัตโนมัติ
  3. $project จัดรูปแบบเอาต์พุตให้สวยงาม

ขยายความสามารถ

  • รองรับมากกว่า 2 ฟิลด์: เพิ่มเข้าไปใน $setUnion: [ "$arr1", "$arr2", "$arr3" ]
  • หากต้องการเรียง descending ใช้ $sortArray (MongoDB 5.2+) หรือ $unwind → $sort → $group