【发布时间】:2020-01-09 08:03:21
【问题描述】:
所以我有 2 个模型:问题和答案。
答案有:questionId、userId、answer(字符串)。
我需要一个聚合管道:
- 按 questionId 匹配所有答案
- 查看当前用户是否已经投票(是他在匹配文档中的 id)
- 将答案分组并计数
我这样实现了 1 和 3:
const q = ObjectId('5d6e52a68558b63fb9302efd');
const user = ObjectId('5d0b3f7daceeb50c477b49e0');
Answer.aggregate([
{ $match: { questionId: q } },
{ $group: { _id: '$answer', count: { $sum: 1 } } },
])
我在这两个聚合管道之间缺少一个步骤,我将在其中迭代匹配的文档,并检查 userId 是否与用户匹配。
我想得到一些像这样的对象:
{
didIVote: true,
result: [ { _id: 'YES', count: 5 }, { _id: 'NO', count: 2 } ]
}
甚至可能是这样的:
[
{ _id: 'YES', count: 5, didIVote: true },
{ _id: 'NO', count: 2, didIVote: false },
]
【问题讨论】:
标签: mongodb mongoose aggregate