我一直在尝试在 $match 管道阶段不使用 $expr 的情况下从集合中获取数据,因为与简单的 $match 相比,它的性能较低
这是我一直在研究的一段代码:
from: 'messages',
let: { "iId": "$_id" },
pipeline: [
{
$match: {
$expr: {
$and: [
{ $eq: ["$interactionId", '$$iId'] },
{ $eq: ["$author.role", 'agent'] }
]
}
}
}
],
as: "messages"
}
},
我期望将此条件更改为:
{
$lookup: {
from: 'messages',
pipeline: [
{
$match: {
"interactionId": "$_id",
"author.role": "agent"
}
},
],
as: "messages"
}
},
一个选项可能是:
...
{
$lookup: {
from: 'messages',
localField: "_id",
foreignField: "interactionId",
pipeline: [
{
$match: {
"author.role": "agent"
}
}
],
as: "messages"
}
},
...
pipeline
里面$lookup
没有任何对父集合数据的引用,它只有对当前数据的引用。
所以你总是必须使用let
变量来访问父级的任何数据