如何解决猫鼬聚合:在“组”阶段内查询
我有以下问题:
我有以下两种型号:
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
加入Assignment
集合 -
$match
分配ID,且为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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。