Để tính tổng số phần tử của mảng trên tất cả document, kết hợp $size (đếm phần tử mảng) và $sum (cộng dồn) trong aggregate.
Dữ liệu mẫu
> db.demo231.insertOne({"Subjects":["MongoDB","MySQL","SQL Server"]});
> db.demo231.insertOne({"Subjects":["Java","C","C++"]});
> db.demo231.insertOne({"Subjects":["Python","Spring"]});
Pipeline aggregate
> db.demo231.aggregate([
{ $group: {
_id: "_id",
ToTalValue: { $sum: { $size: "$Subjects" } }
}}
]);
Kết quả
{ "_id" : "_id", "ToTalValue" : 8 }
Giải thích:
$size: "$Subjects": Trả về số phần tử của mảng Subjects cho mỗi document (3, 3, 2)$sum: { $size: ... }: Cộng dồn các con số đó (3+3+2=8)_id: "_id": Nhóm tất cả thành 1 nhóm (giống null)
Lưu ý:
$sizechỉ dùng trong$projecthoặc$group, KHÔNG dùng trong$match/find()- Để lọc theo size mảng trong find:
{Subjects: {$size: 3}}(exact match) - Để lọc range:
$expr: {$gte: [{$size: "$Subjects"}, 2]}(MongoDB 3.6+) - Nếu mảng null/missing:
$sizelỗi. Dùng{$size: {$ifNull: ["$Subjects", []]}}