Sử dụng $size trong stage $project để tính độ dài mảng. Kết hợp $match để lọc trước.
Tạo collection:
> db.demo382.insertOne({
"Name" : "David",
"details" : [
{ "SubjectName":"MySQL" },
{ "SubjectName":"MongoDB" },
{ "SubjectName":"Java" }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5b5e1c22064be7ab44e7f0") }
Xem dữ liệu:
> db.demo382.find().pretty();
Aggregation đếm số phần tử mảng details:
> db.demo382.aggregate([ { "$match": { "Name": "David" } }, { "$project": { "count": { "$size": "$details" }}} ])Kết quả:
Lưu ý:
$sizechỉ dùng trong$project,$addFields,$set(không dùng trong $match trực tiếp)- Để lọc theo độ dài mảng: dùng
$exprtrong $match:{$expr: {$eq: [{$size: "$details"}, 3]}} $sizetrả về số lượng phần tử mảng, không đệ quy vào mảng con
Tiêu đề đề cập $slice nhưng ví dụ dùng $size. $slice dùng để cắt mảng (limit/skip phần tử), không phải lấy độ dài.