试图聚合多个字段 Mongoose
Posted
技术标签:
【中文标题】试图聚合多个字段 Mongoose【英文标题】:Trying to aggregate on multiple fields Mongoose 【发布时间】:2019-03-30 01:28:02 【问题描述】:我创建了一个时间输入系统,用户可以在其中输入在给定时间段之间花费在任务上的时间量(百分比)。每条记录如下所示。我将用户 _id 更改为显式名称,以使其更易于可视化
"project_name": "first_project",
"linked_project": "5bd057f5d4b8173d88b7fe47",
"percentage": 25,
"user":
"$oid": "Steve"
,
"project_name": "first_project",
"linked_project": "5bd057f5d4b8173d88b7fe47",
"percentage": 50,
"user":
"$oid": "Steve"
,
"project_name": "second_project",
"linked_project": "5bd057f5d4b8173d88b7fe48",
"percentage": 25,
"user":
"$oid": "Steve"
,
"project_name": "second_project",
"linked_project": "5bd057f5d4b8173d88b7fe48",
"percentage": 75,
"user":
"$oid": "Mary"
,
我尝试先按人分组,然后按项目分组。基本上,我想知道每个用户在特定任务上花费了多少。不确定我想要实现的目标是否可行。我在下面包含了我想要实现的目标:
示例输出:
[
user: Steve,
projects: [
first_project: 75,
second_project: 25
]
,
user: Mary,
projects: [
second_project: 75
]
]
我尝试了多种方法来实现这一目标,但都没有成功。希望有人对如何实现这一点有所了解。
【问题讨论】:
【参考方案1】:您可以使用多个组,一个用于汇总每个用户和 project_name 组合的百分比,第二个组用于推送用户的所有文档。
db.colname.aggregate([
"$group":
"_id":
"user":"$user",
"project_name":"$project_name"
,
"time":"$sum":"$percentage"
,
"$group":
"_id":"$_id.user",
"projects":"$push":"project_name":"$_id.project_name","time":"$time"
])
要将输出作为单个文档,您可以在最后一个小组阶段使用
"projects":"$mergeObjects":"$arrayToObject":[[["$_id.project_name","$time"]]]
【讨论】:
如何添加排序,以便项目数组按名称排序? 小组赛前添加$sort:"_id.project_name":1
。以上是关于试图聚合多个字段 Mongoose的主要内容,如果未能解决你的问题,请参考以下文章