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
集合分配
分配id,且为public true$match
外部查找,检查分配是否为非空[]$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