非相関 を試してください ユースケースの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」に続いて
$ expr
$matchステージで集計比較演算子を使用できます。
$ arrayElemAt
$lookup配列から最初の要素をフェッチします。
$ in
_idをblockedIdsと比較します。
$ project
最終応答から「noncr」フィールドを削除するための除外あり。
クエリをテストするときは、ルックアップステージの「from」属性でモデル名またはスキーマ名ではなくコレクション名を使用することに注意してください。