Sử dụng $reduce, $objectToArray, $map để trích xuất keys
Pipeline aggregation phức tạp để lấy tất cả tên trường (keys) từ các đối tượng trong mảng lồng nhau.
Dữ liệu mẫu
> db.demo740.insertOne({
details: [
{ Name: "Chris", Age: 21, CountryName: "US" },
{ Name: "Bob", Age: 20, CountryName: "UK", isMarried: true }
]
});
Truy vấn Aggregation
db.demo740.aggregate([
{
$project: {
ListKeys: {
$reduce: {
input: "$details",
initialValue: [],
in: {
$concatArrays: [
"$$value",
{
$map: {
input: { $objectToArray: "$$this" },
in: "$$this.k"
}
}
]
}
}
}
}
}
]).pretty()
Kết quả
{ "_id": ObjectId("5ead700c57bb72a10bcf066d"), "ListKeys": [ "Name", "Age", "CountryName", "Name", "Age", "CountryName", "isMarried" ] }
Mảng ListKeys chứa tên tất cả các trường xuất hiện trong các đối tượng con, bao gồm cả trùng lặp.