ใช้ 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 ] }
คำอธิบาย
$groupรวมค่า value1 ทั้งหมดไว้ในอาร์เรย์ เดียวกันกับ value2$setUnionรวม 2 อาร์เรย์ ให้ค่าที่ไม่ซ้ำ (Union) และ เรียงลำดับอัตโนมัติ$projectจัดรูปแบบเอาต์พุตให้สวยงาม
ขยายความสามารถ
- รองรับมากกว่า 2 ฟิลด์: เพิ่มเข้าไปใน
$setUnion: [ "$arr1", "$arr2", "$arr3" ] - หากต้องการเรียง descending ใช้
$sortArray(MongoDB 5.2+) หรือ $unwind → $sort → $group