Try 不相关的3.6 中针对您的用例的子查询。
就像是
User.aggregate(
[{$lookup:{
from: "users",
pipeline:[
{$match: {_id:mongoose.Types.ObjectId(id)}},
{$project: {_id:0,blockedIds:1}}
],
as: "noncr"
}},
{$match:{
$expr:{
$not:[
{$in:[
$_id,
{$arrayElemAt:["$noncr.blockedIds",0]}
]}
]
}
}},
{$project:{noncr:0}}]
)
$lookup拉入输入 id 的“blockedIds”,然后$match过滤“_id”不在blockedIds列表中的文档。
$expr允许在 $match 阶段使用聚合比较运算符。
$arrayElemAt从 $lookup 数组中获取第一个元素。
$in将_id 与blockedIds 进行比较。
$project排除从最终响应中删除“noncr”字段。
请注意,当您测试查询时,在查找阶段的“from”属性中使用集合名称而不是模型或架构名称。