我对这个问题进行了一番研究,但没有找到一个不使用$lookup参数的好方法.
我的文档目前大致如下所示:
{
...
problems:
[ { ... id: 1, ...}, { ... id: 7, ...}, { ... id: 122, ...} ],
solutions:
[ { ... assignedProblems: [1, 7] ... }, { ... assignedProblems: [122] ...} ],
...
}
我现在正在try 将assignedProblems
数组与problems
中的id
数组进行匹配.
我当前的聚合如下所示:
{
$unwind: {
path: "$solutions"
},
$lookup: {
from: "problems",
localField: "solutions.assignedProblems",
foreignField: "id",
as: "problems"
}
}
这种聚合工作得无懈可击,但速度非常慢,即使在使用索引时也是如此.
我try 将$lookup替换为以下内容:
$match: {
$expr: {
$setEquals: ["$solutions.assignedProblems", "$problems.id"]
}
}
但是,只有当问题的数量与assignedProblems数组中的元素相同时,这才能起作用.这与使用$eq运算符时的情况相同.
有没有其他方法将这些id与数组进行匹配?