Coba tidak berkorelasi sub kueri dari 3.6 untuk kasus penggunaan Anda.
Sesuatu seperti
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
untuk menarik "blockedIds" untuk id masukan diikuti oleh $match
untuk memfilter dokumen yang "_id" tidak ada dalam daftar Id yang diblokir.
$expr
memungkinkan penggunaan operator perbandingan agregasi dalam tahap $match.
$arrayElemAt
untuk mengambil elemen pertama dari array $lookup.
$in
untuk membandingkan _id dengan blockIds.
$project
dengan pengecualian untuk menghapus bidang "noncr" dari tanggapan akhir.
Harap perhatikan saat Anda menguji kueri, gunakan nama koleksi bukan nama model atau skema di atribut "dari" tahap pencarian.