【发布时间】:2020-08-17 17:29:21
【问题描述】:
现在我想聚合模式以按数组中的用户分组,并将项目字段划分为数组长度以创建平均值..
这是简单的 json 数据 ->
[{"users": ["5ea40086fc4b145b489da93d","5e8cb9a4462e45178c4d3405"],"isBuilt": true, "_id": "5eadd43b30f97f342cf663fc", "items": 3, ...},
{"users": ["5e8cb9a4462e45178c4d3405"], "isBuilt": true, "_id": "5ead419081eec52258b67f70", "items": 5, ...}]
和聚合后 ->
Building.aggregate([
{
$match: {
updatedAt: {
$gte: startDate,
$lte: endDate
},
isBuilt: true
}
},
{
$unwind: "$users"
},
{
$group: {
_id: "$users",
items: {
$sum: '$items'
}
}
},
{
$project: {
user: '$_id',
items: 1,
_id: 0
}
}
])
我得到了这个 json ->
[{"items": 3, "user": "5ea40086fc4b145b489da93d"}, {"items": 8, "user": "5e8cb9a4462e45178c4d3405"}]
正如你在这里看到的,我得到了项目总和。在初始数据中,Users "5ea40086fc4b145b489da93d" and "5e8cb9a4462e45178c4d3405" 有 3 项,user "5e8cb9a4462e45178c4d3405" 有 5 项。在汇总后,它们按项目总和计算,user "5e8cb9a4462e45178c4d3405" -> 8 items, and user "5ea40086fc4b145b489da93d" -> 3 items... 现在我想为用户制作平均项目,比如如果数组用户的长度为 2 或更多,它将划分项目并给出总和.. 和最终json 看起来像 ->
[{"items": 1.5, "user": "5ea40086fc4b145b489da93d"}, {"items": 6.5, "user": "5e8cb9a4462e45178c4d3405"}]
PS如果item的结果不是整数,结果应该四舍五入到十
【问题讨论】:
标签: arrays node.js mongoose group-by aggregation