Используя ArangoDB для описания дружеских отношений, я хочу знать друзей конкретного пользователя A. Поскольку это тестовый образец, я знаю, что A дружит с B.
У меня есть пользователи в коллекции документов и в коллекции edge, содержащей информацию от «_from», являющегося другом для «_to». Если A является другом B, B должен быть другом A. то есть: если есть ребро _ от A _ к B, другое ребро _ от B _ к A существует.
Я использую функцию EDGES в моей коллекции друзей, чтобы узнать, кто из друзей пользователя «u4», _id которого равен 2465087832. Он должен дружить с «u1», который _id равен 2462335320. Потому что я хочу иметь больше, чем просто идентификатор документа, я установил для параметра includeVertices значение true.
Вот моя просьба.
LET out = EDGES(friends, "db/2465087832", "outbound", null, {includeVertices: true})
И ответ:
[
{
"edge": {
"_id": "db/2468102488",
"_from": "db/2465087832",
"_to": "db/2462335320",
"_rev": "2468102488",
"_key": "2468102488"
},
"vertex": {
"_id": "db/2465087832",
"_key": "2465087832",
"_rev": "3962323288",
"id": "u4"
}
}
]
В результате у меня хорошее ребро (u4 дружит с u1), но включенная вершина принадлежит запрошенному пользователю (id: u4). Я пробовал использовать в качестве направления «входящий», а не «исходящий».
LET out = EDGES(friends, "db/2465087832", "inbound", null, {includeVertices: true})
И вот результат:
[
{
"edge": {
"_id": "db/2468364632",
"_from": "db/2462335320",
"_to": "db/2465087832",
"_rev": "2468364632",
"_key": "2468364632"
},
"vertex": {
"_id": "db/2465087832",
"_key": "2465087832",
"_rev": "3962323288",
"id": "u4"
}
}
]
Как видите, вершина остается "u4", даже если ребро хорошее (u1 дружит с u4).
Наконец, я попытался использовать «любое» как направление.
LET any = EDGES(friends, "db/2465087832", "any", null, {includeVertices: true})
И удивительный ответ:
[
{
"edge": {
"_id": "friends/2468364632",
"_from": "user/2462335320",
"_to": "user/2465087832",
"_rev": "2468364632",
"_key": "2468364632"
},
"vertex": {
"_id": "user/2462335320",
"_rev": "3956687192",
"_key": "2462335320",
"id": "u1"
}
},
{
"edge": {
"_id": "friends/2468102488",
"_from": "user/2465087832",
"_to": "user/2462335320",
"_rev": "2468102488",
"_key": "2468102488"
},
"vertex": {
"_id": "user/2462335320",
"_rev": "3956687192",
"_key": "2462335320",
"id": "u1"
}
}
]
Здесь ответ содержит оба ребра (от A до B и от B до A), что правильно, но для обоих вершина - это вершина от u1. Эти три результата кажутся несовместимыми: для «входящего» / «исходящего»: вершина была u4, а для «любого» вершиной была «u1». В моем коде есть ошибка? Вариант, который я должен использовать?
Спасибо,
BobCitron