Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Tổng kích thước mảng trong MongoDB với $size và $sum

Để 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 ý:

  • $size chỉ dùng trong $project hoặ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: $size lỗi. Dùng {$size: {$ifNull: ["$Subjects", []]}}