У меня есть коллекция тех, кто следит за кем (например, Instagram):
db.users.insertMany([
{ _id: 1, name: "Arnold Schwarzenegger" },
{ _id: 2, name: "James Earl Jones" },
{ _id: 3, name: "Harrison Ford" },
{ _id: 4, name: "Jennifer Lawrence" }
]);
db.follows.insertMany([
{ _id: 12, follower: 1, following: 2 },
{ _id: 13, follower: 1, following: 3 },
{ _id: 24, follower: 2, following: 4 },
{ _id: 23, follower: 2, following: 3 }
]);
Я пытаюсь предложить другим пользователям, что один пользователь может подписаться.то есть за какими людьми они могли следовать;рекомендуемые последователи, упорядоченные по количеству существующих общих связей.
В этом примере:
+--------+--------------+----------+
| A | is following | B |
+--------+--------------+----------+
| Arnold | -> | James |
| Arnold | -> | Harrison |
| James | -> | Jennifer |
| James | -> | Harrison |
+--------+--------------+----------+
Кто может следовать за Арнольдом и Джеймсом? (исключая существующиесоединения)
The answer should be: Jennifer
Это неудачная попытка:
db.users.aggregate([
{
$match: { _id: 1 } // Arnold
},
{
$graphLookup: {
from: "follows",
startWith: "$_id",
connectFromField: "following",
connectToField: "follower",
maxDepth: 1,
as: "connections",
}
}
]);
Что приводит к:
{
"_id": 1,
"name": "Arnold Schwarzenegger",
"connections": [
{
"_id": 24,
"follower": 2,
"following": 4
},
{
"_id": 13,
"follower": 1,
"following": 3
},
{
"_id": 23,
"follower": 2,
"following": 3
},
{
"_id": 12,
"follower": 1,
"following": 2
}
]
}
Я считаю, что мне нужно сделать немного раскручивания,но я застрял сейчас