Опитайте некорелирани подзаявка от 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
за изтегляне на „blockedIds“ за входен идентификатор, последван от $match
за филтриране на документите, където "_id" не е в списъка с блокирани идентификатори.
$expr
позволява използването на оператори за сравнение на агрегиране в етап $match.
$arrayElemAt
за извличане на първия елемент от $lookup масив.
$in
за да сравните _id с blockedIds.
$project
с изключение за премахване на полето "noncr" от крайния отговор.
Моля, обърнете внимание, когато правите тестова заявка, използвайте името на колекцията, а не името на модела или схемата в атрибута „от“ на етапа на търсене.