Gộp nhóm bản ghi và truy xuất giá trị với dot notation
Ví dụ minh họa cách sử dụng $group với dot notation để gộp các tên từ mảng lồng nhau.
1. Tạo collection với mảng lồng
> db.demo430.insertOne({
details: [
{ "Name": "Chris" },
{ "Name": "David" },
{ "Name": "Adam" },
{ "Name": "Bob" }
]
});
{ "acknowledged": true, "insertedId": ObjectId("5e7702ddbbc41e36cc3cae88") }
2. Xem dữ liệu
> db.demo430.find();
{ "_id": ObjectId("5e7702ddbbc41e36cc3cae88"), "details": [{ "Name": "Chris" }, { "Name": "David" }, { "Name": "Adam" }, { "Name": "Bob" }] }
3. Truy vấn gộp nhóm
> db.demo430.aggregate([
{ "$group": { "_id": { "Name": "$details.Name" } } }
]);
4. Kết quả
{ "_id": { "Name": ["Chris", "David", "Adam", "Bob"] } }
Giải thích
$details.Namesử dụng dot notation để truy xuất tất cả giá trịNametừ mảngdetails- MongoDB tự động "flatten" mảng thành một mảng phẳng các giá trị
- Kết quả là một tài liệu duy nhất chứa mảng tất cả tên
Mở rộng: Nếu cần đếm số lần xuất hiện, thêm count: { $sum: 1 } vào $group.