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

วิธีแสดงเฉพาะ Keys จากเอกสารฝังซ้อนใน MongoDB

ใช้ $reduce, $map, $objectToArray ใน Aggregate

รวมคีย์จากทุกเอกสารในอาร์เรย์โดยแปลงแต่ละอ็อบเจกต์เป็นอาร์เรย์ key-value ด้วย $objectToArray แล้วดึงเฉพาะ key (k)

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

> db.demo740.insertOne({
    "details": [
        { Name:"Chris", Age:21, CountryName:"US" },
        { Name:"Bob", Age:20, CountryName:"UK", isMarried:true }
    ]
});

แสดงข้อมูลทั้งหมด

> db.demo740.find();

ผลลัพธ์:

{ "_id" : ObjectId("5ead700c57bb72a10bcf066d"), "details" : [ { "Name" : "Chris", "Age" : 21, "CountryName" : "US" }, { "Name" : "Bob", "Age" : 20, "CountryName" : "UK", "isMarried" : true } ] }

คิวรีดึงเฉพาะชื่อฟิลด์ (keys) จากทุกอ็อบเจกต์ในอาร์เรย์ details

> db.demo740.aggregate([
    {
        $project: {
            ListKeys: {
                $reduce: {
                    input: "$details",
                    initialValue: [],
                    in: {
                        $concatArrays: [
                            "$$value",
                            { $map: {
                                input: { $objectToArray: "$$this" },
                                in: "$$this.k"
                            }}
                        ]
                    }
                }
            }
        }
    }
]).pretty()

ผลลัพธ์: รายการคีย์ทั้งหมด (ซ้ำได้)

{ "_id" : ObjectId("5ead700c57bb72a10bcf066d"), "ListKeys" : [ "Name", "Age", "CountryName", "Name", "Age", "CountryName", "isMarried" ] }