Предположим, у вас есть следующие документы в ваших коллекциях пользователей,
{
"_id" : 1.0,
"teams" : [
1.0,
5.0,
8.0,
12.0,
10.0
]
}
{
"_id" : 2.0,
"teams" : [
1.0,
2.0,
3.0,
8.0,
10.0
]
}
{
"_id" : 3.0,
"teams" : [
4.0,
7.0,
9.0,
12.0
]
}
{
"_id" : 5.0,
"teams" : [
21.0,
45.0,
85.0
]
}
и вы хотите, чтобы все пользователи, которые разделяют любую команду с идентификатором пользователя 1. Этого можно добиться с помощью $ lookup stage:
db['users'].aggregate(
[
{
$match: {
_id:1
}
},
{
$lookup: {
from: "users",
let: { id:"$_id", team:"$teams" },
pipeline: [ {$match:{$expr:{$and:[
{$ne:["$_id","$$id"]},
{$ne:[{$setIntersection:["$teams","$$team"]},[]]}
]}}}],
as: "connected_users"
}
},
],
);
Будет выведено:
{
"_id" : 1.0,
"teams" : [
1.0,
5.0,
8.0,
12.0,
10.0
],
"connected_users" : [
{
"_id" : 2.0,
"teams" : [
1.0,
2.0,
3.0,
8.0,
10.0
]
},
{
"_id" : 3.0,
"teams" : [
4.0,
7.0,
9.0,
12.0
]
}
]
}