Trong MongoDB, $push có 2 ngữ cảnh sử dụng chính: (1) Cập nhật: thêm phần tử vào mảng của tài liệu hiện có; (2) Aggregation: gom nhóm nhiều tài liệu thành một mảng. Bài này tập trung vào **Aggregation $push** để biến nhiều dòng thành một mảng.
1. Tạo bộ sưu tập và chèn dữ liệu
> db.demo399.insertOne({ Name: "Chris", Age: 21 });
> db.demo399.insertOne({ Name: "David", Age: 22 });
> db.demo399.insertOne({ Name: "Chris", Age: 21 });
> db.demo399.insertOne({ Name: "Bob", Age: 23 });
> db.demo399.insertOne({ Name: "David", Age: 22 });
2. Xem dữ liệu (5 tài liệu riêng lẻ)
> db.demo399.find();
Kết quả: 5 tài liệu riêng biệt.
3. Aggregation: Gom tất cả thành một mảng duy nhất
> db.demo399.aggregate([
{
$group: {
_id: null, // Gom tất cả vào một group
array: { $push: { Name: "$Name", Age: "$Age" } } // Đẩy object vào mảng
}
}
]);
4. Kết quả
{ "_id": null, "array": [
{ "Name": "Chris", "Age": 21 },
{ "Name": "David", "Age": 22 },
{ "Name": "Chris", "Age": 21 },
{ "Name": "Bob", "Age": 23 },
{ "Name": "David", "Age": 22 }
] }
Giải thích:
_id: null: Gom toàn bộ collection thành 1 group.$push: Tạo mảng, mỗi phần tử là object{Name, Age}từ từng tài liệu.
Bổ sung: $push trong Update (thêm phần tử vào mảng hiện có):
db.demo399.updateOne(
{ Name: "Chris" },
{ $push: { Skills: "MongoDB" } }
);
Thêm "MongoDB" vào mảng Skills của tài liệu có Name="Chris".