Bạn có thể $ thư giãn mảng của bạn để nhận một tài liệu cho mỗi phần tử và sau đó chạy $ group để đếm các phần tử:
db.collection.aggregate([
{
$unwind: "$elements"
},
{
$group: {
_id: "$elements",
count: { $sum: 1 }
}
}
])
CHỈNH SỬA:bạn có thể sử dụng nhóm bổ sung với $ ReplaceRoot và $ arrayToObject để trả về id của bạn dưới dạng khóa và được tính là giá trị:
db.collection.aggregate([
{
$unwind: "$elements"
},
{
$group: {
_id: "$elements",
count: { $sum: 1 }
}
},
{
$group: {
_id: null,
counts: { $push: { k: "$_id", v: "$count" } }
}
},
{
$replaceRoot: {
newRoot: { $arrayToObject: "$counts" }
}
}
])