【发布时间】:2021-04-24 08:13:27
【问题描述】:
我有两个 Mongo 集合,用户和活动。每个活动都有一个createdAt 字段(日期类型)、一个hoursWorked(数字类型)字段和一个user 引用。每个用户只有一个 id 和 name 字段(为简单起见)。我想获取活动列表并加入用户名,但我还想加入特定日期的hoursWorked 总数和每一行的用户。
以下是一些示例输入数据和预期结果:
活动合集
| createdAt | hoursWorked | user |
|---|---|---|
| "2021-01-01" | 2 | a1 |
| "2021-01-01" | 1 | a1 |
| "2021-01-02" | 3 | a1 |
| "2021-01-02" | 3 | a1 |
| "2021-01-01" | 1 | b2 |
| "2021-01-01" | 1 | b2 |
| "2021-01-02" | 2 | b2 |
用户收藏
| id | name |
|---|---|
| a1 | Alfred |
| b2 | Brenda |
预期输出
| createdAt | hoursWorked | name | totalHoursForDay |
|---|---|---|---|
| "2021-01-01" | 2 | Alfred | 3 |
| "2021-01-01" | 1 | Alfred | 3 |
| "2021-01-02" | 3 | Alfred | 6 |
| "2021-01-02" | 3 | Alfred | 6 |
| "2021-01-01" | 1 | Brenda | 2 |
| "2021-01-01" | 1 | Brenda | 2 |
| "2021-01-02" | 5 | Brenda | 5 |
加入用户很容易,但我正在努力弄清楚如何按用户和日期聚合,然后加入所有内容。我目前计划只获取活动,然后在我的 Node Express 应用程序中循环聚合 JavaScript 对象中的时间然后以这种方式加入它,但我想知道是否有人有更有效的方法来使用 Mongoose 查询来做到这一点?这是我到目前为止的代码......现在非常基本。
const activities = await Activity
.find({}, null, { sort: { createdAt: 1 } })
.populate("user", "name").exec();
提前感谢您的帮助!
【问题讨论】:
标签: javascript node.js mongodb express mongoose