【问题标题】:Mongoose aggregation: Query within "group" phaseMongoose 聚合:“组”阶段内的查询
【发布时间】:2020-12-28 16:15:32
【问题描述】:

我有以下问题:

我有以下两种型号:

Assignment: {
  _id,
  isPublic: Boolean
}

Solution: {
  _id,
  totalTime: Number,
  assignment: { type: Schema.Types.ObjectId, ref: 'Assignment' },

}

我想查询所有解决方案,按作业分组,但我只关心公开的作业 (isPublic === true)。

但我不知道在哪里进行该查询。你能帮帮我吗?

到目前为止,我的聚合如下所示:

{
        $match: {
            assignment: {
                $exists: true,
                $ne: null,
            },
        },
        {
            $group: {
                _id: '$assignment',
                totalTime: { $sum: '$totalTime' },
            },
        },
        {
            $sort: {
                totalTime: -1,
            },
        }
}

这很好用,但是如何过滤我的结果以仅考虑公共作业?我发现的所有过滤器和查询方法似乎都只适用于find(),但不适用于聚合。

你有什么建议吗?

【问题讨论】:

    标签: javascript mongodb mongoose aggregate


    【解决方案1】:

    您可以将$lookup 与管道一起使用,

    • $lookup加入Assignment收藏
    • $match assignment id 并且是 public true
    • $match外部查找,检查赋值不为空[],
      { $match: ...  }, // skipping 
    
      // add this
      {
        $lookup: {
          from: "Assignment",
          let: { aId: "$assignment" },
          pipeline: [
            {
              $match: {
                $expr: { $eq: ["$_id", "$$aId"] },
                isPublic: true
              }
            }
          ],
          as: "assignments"
        }
      },
      // add this
      { $match: { assignments: { $ne: [] } } },
    
      { $group: ... }, // skipping
      { $sort: ... } // skipping
    

    Playground

    【讨论】:

      猜你喜欢
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 2018-04-04
      相关资源
      最近更新 更多