Javascript Mongoose聚合:在“内查询”;“集团”;阶段

Javascript Mongoose聚合:在“内查询”;“集团”;阶段,javascript,mongodb,mongoose,aggregate,Javascript,Mongodb,Mongoose,Aggregate,我有以下问题: 我有以下两种型号: Assignment: { _id, isPublic: Boolean } Solution: { _id, totalTime: Number, assignment: { type: Schema.Types.ObjectId, ref: 'Assignment' }, } 我想查询所有的解决方案,按分配对它们进行分组,但我只关心公共的分配(isPublic==true) 但我不知道该在哪里提出这个问题。你能帮我吗 到目前为止,

我有以下问题:

我有以下两种型号:

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()
中工作,而不适用于聚合


您有什么建议吗?

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

  • $lookup
    加入
    分配
    集合
  • $match
    分配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