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

การกำหนดรูปแบบการส่งคืนข้อมูลใน MongoDB ด้วย $addToSet

จัดรูปแบบผลลัพธ์เป็นอาร์เรย์ค่าไม่ซ้ำด้วย $addToSet

บทความนี้สาธิตการใช้ Aggregation Pipeline พร้อม $group และ $addToSet เพื่อรวมค่าของฟิลด์จากหลายเอกสารเป็นอาร์เรย์เดียวที่ไม่มีค่าซ้ำ (Unique Values) และจัดรูปแบบเอาต์พุตด้วย $project

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

> db.demo207.insertOne({"FavouriteTechnology":"Spring Boot"});
{ "acknowledged": true, "insertedId": ObjectId("5e3d8e7a03d395bdc21346f1") }
> db.demo207.insertOne({"FavouriteTechnology":"MongoDB"});
{ "acknowledged": true, "insertedId": ObjectId("5e3d8e8f03d395bdc21346f2") }
> db.demo207.insertOne({"FavouriteTechnology":"Groovy"});
{ "acknowledged": true, "insertedId": ObjectId("5e3d8ea603d395bdc21346f3") }

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

> db.demo207.find();

ผลลัพธ์:

{ "_id": ObjectId("5e3d8e7a03d395bdc21346f1"), "FavouriteTechnology": "Spring Boot" }
{ "_id": ObjectId("5e3d8e8f03d395bdc21346f2"), "FavouriteTechnology": "MongoDB" }
{ "_id": ObjectId("5e3d8ea603d395bdc21346f3"), "FavouriteTechnology": "Groovy" }

ขั้นตอนที่ 3: Aggregation Pipeline รวมค่าไม่ซ้ำ

  1. $group - จัดกลุ่มทั้งหมด (_id: 0) และใช้ $addToSet รวม FavouriteTechnology เป็นอาร์เรย์ไม่ซ้ำ
  2. $project - ซ่อน _id แสดงเฉพาะ FavouriteTechnology
> db.demo207.aggregate([
    { "$group": {
        "_id": 0,
        "FavouriteTechnology": { "$addToSet": "$FavouriteTechnology" }
    }},
    { "$project": { "_id": 0, "FavouriteTechnology": 1 } }
]);

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

{ "FavouriteTechnology": ["MongoDB", "Groovy", "Spring Boot"] }

สรุป: $addToSet คล้าย $push แต่จะเพิ่มค่าเข้าไปในอาร์เรย์ก็ต่อเมื่อค่านั้นยังไม่มีอยู่แล้ว (Unique) เหมาะสำหรับการสร้างรายการค่าที่ไม่ซ้ำกันจากหลายเอกสาร