У меня есть простая структура данных, которая определяет людей и их друзей.
{
id: 0,
name: 'a',
friends: [1,2,3]
}
Мне нужно найти общих друзей двух людей. Мне удалось с помощью агрегационной пиплелины получить массив friends в массив.
{ "_id" : 0, "friends" : [ [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ], [ 0, 1, 2 ] ] }
Таким образом, поле friends является вложенным массивом, и я хочу получить пересечение его элементов.
Я пытался использовать операцию $setIntersection
, однако я обнаружил, что она не принимает переменную массива, она принимает только массив переменных. Поэтому я должен использовать что-то вроде этого, чтобы получить результат.
{
$project: {
commonFriendIds: {
$setIntersection: [
{ $arrayElemAt: ["$friends", 0] },
{ $arrayElemAt: ["$friends", 1] }
]
}
}
}
Это выглядит ужасно, и я должен изменить код, если мне нужно найти общих друзей из 3 или более человек.
Есть ли лучший способ выполнить sh это?