ArangoDB を使用して友人関係を記述し、特定のユーザー A の友人を知りたいと考えています。これはテスト サンプルなので、A が B と友人であることがわかります。
ドキュメント コレクションと、"_from" から "_to" への情報を含むエッジ コレクションにユーザーがいます。A が B の友人である場合、B は A の友人でなければなりません。つまり、A から B へのエッジがある場合、B から A への別のエッジが存在します。
_id が 2465087832 のユーザー「u4」のフレンドを知るために、フレンド コレクションで関数 EDGES を使用します。ドキュメント ID の場合、オプション "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 のものです。この 3 つの結果は矛盾しているようです: "inbound"/"outbound" の場合: 頂点は u4 で、"any" の場合は頂点は "u1" です。コードにバグはありますか? 使用すべきオプションは?
ありがとう、
ボブシトロン