Hãy thử không tương quan truy vấn phụ từ 3.6 cho trường hợp sử dụng của bạn.
Một cái gì đó giống như
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
để lấy "BlockIds" cho id đầu vào, theo sau là $match
để lọc các tài liệu mà "_id" không có trong danh sách Id bị chặn.
$expr
cho phép sử dụng các toán tử so sánh tổng hợp trong giai đoạn $ so khớp.
$arrayElemAt
để tìm nạp phần tử đầu tiên từ mảng $ lookup.
$in
để so sánh _id với các id bị chặn.
$project
với loại trừ để xóa trường "noncr" khỏi phản hồi cuối cùng.
Vui lòng lưu ý khi bạn kiểm tra truy vấn, hãy sử dụng tên bộ sưu tập không phải tên mô hình hoặc tên giản đồ trong thuộc tính "from" của giai đoạn tra cứu.